這是一些分析jQuery框架的文字
針對jQuery
面向的讀者應具備以下要求
言歸正傳!
jQuery對象的初始化是寫在匿名函數裡的
就像這樣
(function(){alert(
第一個括號是聲明了一個函數
匿名函數是怎麼實現這些功能的呢?
首先框架定義了兩個核心對象
jQuery = window
一個是jQuery
一個是$
這兩個對象都指向一個函數
這個函數是我們使用$()或jQuery()方法時的入口
jQuery對象是一個什麼樣的對象呢?
jQuery對象其實是一個javascript的數組
這個數組對象包含
jQuery 當前的jQuery框架版本號
length 指示該數組對象的元素個數
context 一般情況下都是指向HtmlDocument對象
selector 傳遞進來的選擇器內容 如
如果你通過$(
jQuery對象是怎麼構造出來的呢?
這個對象就是剛才我們提到的
jQuery = window
框架不只為此對象定義了一個方法
jQueryjQuery
原型的定義是通過json對象定義的
如
{
init
jQuery
size
//……
}
前面提到的
這個正則表達式為
quickExpr = /^[^<]*(<(
下面我們說一下init方法的實現邏輯
此方法有兩個參數
一個是selector(選擇器)
一個是context(上下文)
selector就是我們用$(
這個參數不一定是字符串
等會兒我們就會介紹到
context參數我們在使用jQuery的時候很少用到
注意這兩個參數都在返回的jQuery對象中體現出來了(以兩個同名的屬性展示)
下面看一下這個方法體內部的實現邏輯
//如果沒有選擇器或者選擇器為空的話
selector = selector || document;
//如果selector參數是dom元素
//也就是說你可以$(document
if ( selector
this[
this
ntext = selector;
return this;
}
//typeof 取對象的類型
if ( typeof selector ===
//這裡用到了我們前面提到的正則表達式quickExpr
//match其實是一個數組
//第
//第
//第
//第
var match = quickExpr
//正則表達式匹配到了內容 並且 match[
//match[
xland
//context為空的時候selector是頁面元素ID
if ( match && (match[
//選擇器為html字符串 此情況暫且不表
if ( match[
selector = jQuery
//選擇器為ID
else {
//得到元素
var elem = document
//如果得到了這個元素但是元素的ID屬性不是match[
if ( elem && elem
return jQuery()
//把得到的頁面元素封裝成jQuery對象
//如果elem為空
//如果不為空就跳入我們前面說的if ( selector
var ret = jQuery( elem || [] );
//設置jQuery對象的context屬性
ntext = document;
//設置jQuery對象的selector屬性
ret
//返回這個對象給調用者
return ret;
}
至此
var obj = $(
構造jQuery對象的初步工作就做完了
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26677.html