Prototype源碼淺析——Object部分(二)之類型檢測

扯淡:本來這個《Prototype源碼淺析》是只打算作為學習Prototype的筆記的,不過有時候發現一個問題可以深入一點(雖然還是淺析),就脫離了原來的預期,越來越偏題了。今天的打算本來是寫完Str的,但是寫到變數檢測的時候,發現又可以扯點淡,就又拖累了進程。這個對於項目來說,肯定是不好的,不過對於學習,就不清楚了。因為自己吃過的虧,所以從一個新手的角度,寫得盡量新手向,新手共勉。 這裡我不關心javascript裡面各種類型是怎麼定義的,唯一要指出的是var str_1 = 'xesam';

createElement與createDocumentFragment的點點區別

在DOM操作裡,createElement是建立一個新的節點,createDocumentFragment是建立一個文檔片段。網上可以搜到的大部分都是說使用createDocumentFragment主要是因為避免因createElement多次添加到document.body引起的效率問題,比如:var arrText=["1","2","3","4","5","6","7","8","9","10"];for(var i=0;i<arrText.length;i++){var

Prototype源碼淺析——Enumerable部分(二)

剩下的方法太多,於是分作兩部分。亮點就是$break和$continue,以及grep方法的思想。   前面each方法中掉了一個方面沒有說,就是源碼中的$break和$continue。這兩個變數是預定義的,其作用相當於普通迴圈裡面的break和continue語句的作用。出於效率的考慮,在某些操作中並不需要完全遍曆一個集合(不局限於一個數組),所以break和continue還是很必要的。對於一個迴圈來說,對比下面幾種退出迴圈的方式: var array_1 =

擷取捲軸的尺寸

這個比較簡單,做個記錄而已。建立一個嵌套節點,讓外層節點產生捲軸,然後用offsetWidth - clientWidth即可獲得捲軸寬度。需要注意的是為了避免頁面抖動,可以設定外層元素position:absolute和visibility:hidden參考: function getScrollWith(){var wrap = setAttributes(document.createElement('div'),{ style : {

關於setTimeout的第三個參數以及小應用

setTimeout的通常用法是幹什麼我就不多說了,上次看到一個setTimeout的一個用法: var arr = [1,9,2,8,3,7,4,6,4,5];for(var i = 0, len = arr.length; i < len; i++){ setTimeout(function(x){ console.log(x); },arr[i],arr[i]);

從URL中提取參數與將對象轉換為URL查詢參數

這兩種主要是對《Prototype淺析》先前略過的Sring部分中toQueryParams和Object部分的toQueryString方法的補充 一、從URL中提取參數有下列字串:var linkURL = 'http://localhost:8080/String/string_6.html?暱稱=小西山子&age=24#id1';對於一個真實的URL地址,可以用js來讀取location中的相關資訊來獲得某些資訊,下面列舉一些:location.origin :

從字串中解析出JSON

JSON介紹http://json.org/這個解析JSON,也是Prototype源碼淺析的一個鋪墊。下面是一個開篇例子,其中response是從伺服器獲得的JSON字串: var response_1 = "{\"user\":\"xesam\",\"info\":{\"age\":\"24\"}}";var response_2 = "{'user' : 'xesam'}";var response_3 = "console.log('xss')";var obj_1_1 =

Prototype源碼淺析——Hash部分(一)

Hash是Prototype作者擴充出來的一個資料類型。本質上他就是一個普通的javascript對象(註:不要糾結什麼javascript變數都是對象,這裡說new Object()那種),然後在這個對象上面擴充出來一些其他的方法。基本原理基本的原理的代碼說明就是: function Hash(object){this._object = object; } Hash.prototype = { constructor : Hash,

擷取瀏覽器的可視地區尺寸

測試例子:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>

Prototype源碼淺析——Function.prototype部分(二)

接著上一部分:Prototype源碼淺析——Function.prototype部分(一)粗略回顧,前面的一個例子,兩條道路:function handler(greet){ console.log(greet,this.name); }var obj = { name : 'xesam'

JS的鏈式調用

鏈式調用的優點是代碼簡潔易讀,減少了多次重複使用同一個變數。最常見的還是在jQuery庫裡面,例如:$(‘#id’).show().hide().show().hide().show().hide();(當然,這麼調用純屬蛋疼)在上面的語句中,$(‘#id’)是一個對象,然後鏈式的執行方法,其中的原理很簡單,就是執行完一個方法之後就返回本身(return this);然後被返回的對象(上例中就是$(‘#id’))繼續執行後面的方法,如果你這麼寫:var obj = $(‘#id’).show()

Prototype源碼淺析——String部分(三)之HTML字串處理

HTML處理stripTags  | escapeHTML |  unescapeHTML  JSON處理unfilterJSON |  isJSON |  evalJSON |  parseJSON指令碼處理stripScripts |  extractScripts  | evalScripts    

Prototype源碼淺析——元素選取器部分(一)之$

簡述    $ 方法是 Prototype 的基礎,和jquery中的$作用差不多,不過功能卻弱了很多。因為Prototype中還有一個$$方法,看名字就知道,和$相比,$$加了一倍的錢,功能肯定就豐富撒。本文主要是剖析$方法,1.7版本的$$方法使用的是Sizzle引擎,比較複雜,是後面的事情。基本原理  $ 方法其實比較簡單,平時在個人的代碼中見得也比較多。基本原理就是如果傳入的是一個字串,就執行document.getElementById方法,如果是一個DOM元素,就直接返回傳入的元素,

Prototype源碼淺析——Object部分(一)

前些天小小的分析了一下Prototype的Function部分,今天開始Prototype的Object這一部分開始需要說明的一點是,Object這部分與先前的Function那一部分有點不一樣,這次Object是直接擴充在Object上面的,而非Object.prototype,兩者是有本質區別的,也就是本次Obeject的擴充相當於添加Object的一個靜態變數(方法);extend(Object,

Sizzle引擎–原理與實踐(一)

  大家都知道,Sizzle是jQuery的禦用選取器引擎,是jQuery作者John Resig寫的DOM選取器引擎,速度號稱業界第一。另外,Sizzle是獨立的一部分,不依賴任何庫,如果你不想用jQuery,可 以只用Sizzle。所以單獨拿出來特別對待。在Prototype1.7中,選取器也採用了Sizzle,不過版本有點老,所以我去Sizzle網站搞了一份新的

Prototype源碼淺析——Object部分(三)之有關JSON

對JSON不甚瞭解的可以先看下這個:《JSON三分鐘課程》、《JSON入門課程》對JSON的操作主要是解析JSON字串為一個對象和將一個對象轉換成JSON字串。網上搜一下JSON解析,就會發現一堆文章和方法,當然這篇文章主要不是討論JSON的解析,不過也可以大致回顧一下:第一、eval。eval('(' + jsonStr +

Sizzle引擎–原理與實踐(二)

主要流程與Regex分塊var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;這個正則比較長,主要是用來分塊和一步預先處理。1、2、3、4、'div#test + p > a.tab' --> ['div#test','+','p'

Firefox升級到5、6的坑爹bug【有關Firefox應用中心】

最近幾個同事升級了ff到5和6,於是有人向我報告了一個bug,說是一個上傳圖片的功能失效了,關鍵是有的升級有問題,有的升級之後又沒有問題。於是我檢查下,發現這個問題太坑爹了,居然是由一個外掛程式引起的,就是更新之後出現的那個由Firefox魔鏡升級的Firefox應用中心。具體原因:上傳圖片使用的是jquery的一個外掛程式:ajaxfileupload.js,裡面有段代碼是這樣的:if (io.contentWindow) {

Sizzle引擎–原理與實踐(三)

尋找的入口對應的是Sizzle.find方法,Sizzle.find = function( expr, context) {}expr      :尋找的運算式context :尋找的範圍find的步驟第一步:判斷主要集合,方法說過了,依次匹配,順序就是ID --> NAME -->

Sizzle引擎–原理與實踐(四)

元素過濾是Sizzle中最複雜的一部分基本形式Sizzle.filter = function( expr, set, inplace, not ) {}expr    過濾運算式set      候選集合inplace 是否原地修改not      是否取補集說明:set傳遞的是一個集合(數組),如果inplace為true,set會被修改;not的作用是用來取補集。還是用個例子來說明下:<li id="a1" class="test"></li><li id="

總頁數: 61357 1 .... 10072 10073 10074 10075 10076 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.