###1.jQuery 入口方式 在常用的jquery入口方式中估計大部分人都是直接用的是
$(function(){
//code
})
複製程式碼
下面詳細說一下jquery的幾種入口方式: ####1.1 $ 符號+ready() 的方式 很多人可能會看到一下這種方式入口,是通過ready() 函式呼叫,至於原理會在下面講解。
$(document).ready(function(){
//code
});
複製程式碼
####1.2 $ 符號 +簡寫 的方式 這種應該最多人用的,因為寫起來也是最方便的
$(function(){
//code
})
複製程式碼
####1.3 jQuery +ready() 的方式 這是jquery完整的寫法,也是最初的形態。
jQuery(document).ready(function(){
console.log('jQuery ready 入口方式');
})
複製程式碼
####1.4 jQuery + 簡寫入口 這種方式也是跟第二種方式類似
jQuery(function(){
console.log('I am jquery ');
})
複製程式碼
2. 模擬 jQuery 的入口函式
####2.1 認清楚 $ 符號 其實 $ 是 jQuery 的一個代替品,也就是可以解析為什麼上面四種入口方法類似的原因。 嘗試:
var $ = 'I am $';
console.log($);
複製程式碼
從控制檯列印出來的是
I am $
複製程式碼
再次測試,引入jQuery 後列印 $ 物件和 jQuery 物件
<script src="jquery-1.11.1.min.js"></script>
<script>
console.log($);
console.log(jQuery);
console.log($===jQuery)
</script>
複製程式碼
列印結果如下:
結論:從上面可以得知 $ 和 jQuery 是同一個物件,也可以得知它是一個方法(或者物件),通過傳遞(a,b)兩個引數,返回了一個新的物件,當然,在這裡面也會根據你是否已經建立過該物件。
再次測試,看建立兩個jQuery 物件情況會怎麼樣, $ 和 jQuery.
var t1 = $;
var t2 = jQuery;
console.log(t1===t2);
複製程式碼
思考另外一種情況:
var t1 =new $;
var t2 = new jQuery;
console.log(t1===t2);
複製程式碼
這樣子的情況請問相等嘛? 答案是 false
解析:
通過new 是開闢了一個新的空間,去儲存這個物件。具體看一下
console.log(t1);
console.log(t2);
複製程式碼
再看,如果是通過 $ 或 jQuery 直接列印出來的物件可以看得出是 一個方法裡面通過傳引數,而通過 new $ 或 new jQuery 的話直接是返回的物件,下面是兩個的對比。
繼續探究:
返回的屬性有個 proto 物件 列印一下:
var t2 = new jQuery;
console.log(t2);
console.log(t2.__proto__);
複製程式碼
繼續推測:
//下面這句會不會是 列印jQuery 的版本號呢?
console.log(t2.__proto__.jquery);
複製程式碼
下面這句通過
jQuery.fn = jQuery.prototype ={
//這裡暴露一些屬性介面資訊
jquery: version,// 這裡把上面的版本號version 通過jquery這個介面獲得
}
複製程式碼
詳情圖:
貌似跑題了。回到最初的問題 ####2.1 寫一個kQuery 庫 回顧js 的呼叫方式
var kQuery= function (a){
//code
}
kQuery(a);
複製程式碼
測試下你的 code 塊是否被執行了。 再次模擬jquery,它是返回一個 物件。 那我們的kQuery 應該也有個物件返回,
var kQuery= function (a){
//返回物件
return obj;
}
複製程式碼
上面程式碼明顯是錯誤的,因為 它不知道 obj 是個什麼東東,所以應該先定義 obj 為一個物件。
var kQuery= function (a){
var obj ={}
//返回物件
return obj;
}
複製程式碼
再次看 第一大點,jquery的如後函式是不是都是通過ready() 來執行的,那是不是這個物件應該擁有ready 的這個方法。
var kQuery= function (a){
var obj ={
ready:function(){
console.log('This is ready function');
}
}
//返回物件
return obj;
}
複製程式碼