zepto原始碼分析

2021-07-26 07:38:22 字數 1694 閱讀 3350

首先我們看一下如下**,如何給乙個陣列物件新增其他方法

var arr = [1,2,3];

arr.__proto__ = ,

concat: array.prototype.concat,

push: array.prototype.push

};arr.push(4); // [1, 2, 3, 4]

arr.addclass(); // 'addclass'

我們修改了陣列arr的隱式原型__proto__,使它擁有了更多方法,更多原型繼承可以參考另一篇博文原型繼承與應用。zepto的原理也是這樣:通過$()選擇器返回的類陣列物件,將物件的隱式原型修改,使zepto物件具有多種方法可以被我們使用

zepto主要結構如下所示,先使用iife(立即執行函式)返回乙個值,然後把這個返回值放在window的zepto屬性中,也就是說zepto成為了乙個全域性變數。window.$ === false && expression,這是乙個簡潔寫法,意為第乙個表示式為false時返回第二個表示式,也就是執行expression。當$沒被定義時將$函式賦值給zepto。所以我們引用$()的時候,實際上是引用zepto。

var zepto = (function

()()

window.zepto = zepto;

window.$ === undefined && (window.$ = zepto)

顯而易見,iife的返回值是乙個物件,因為我們經過$()選擇元素之後,可以使用一系列方法,如addclass ,find等等。那麼這個物件是什麼,請看以下**

var zepto = (function

() return $;

}()

當我們使用$('#aa')的時候,其實執行的是zepto('#aa'),也就是iife的返回值$(selector, context),也就是zepto.init(selector, context)

zepto.init = function

(selector, context)

主邏輯轉移到了zepto.z函式中

上個版本的z函式是這樣實現的:

zepto.z = function

(dom, selector)

最新版本的z函式如下:

function

z(dom, selector)

zepto.z = function

(dom, selector)

zepto.z.prototype = z.prototype = $.fn

這種方法直接改變了建構函式z的原型,導致new出來的物件的__proto__指向$.fn,和上面的方法效果相同,唯一不同的是,最新的z函式返回的是像

前者的物件稱為類陣列物件,而原來是陣列

[dom[0], dom[1], dom[2]]

Zepto原始碼分析 deferred模組

原始碼注釋 zepto.js c 2010 2015 thomas fuchs may be freely distributed under the mit license.some code c 2005,2013 jquery foundation,inc.and other contribu...

zepto原始碼結構

在引入zepto檔案以後,我們就可以使用zepto的方法,例如 selector 這是因為下面的 window.zepto zepto window.undefined window.zepto 複製 在window物件上,我們繫結了zepto,zepto這是乙個立即執行函式。如果 不存在,就把wi...

Zepto原始碼之ie模組

function catch e catch e 這段 的主要作用是改寫 getcomputedstyle 方法。主要是為了 zepto 在不同的瀏覽器下,可以進行相同的操作。通過檢視 我們可以看出主要使用的方法是利用 try catch 來進行異常處理。同時這是乙個立即執行函式,使得我們在載入框架...