jqueryソースノート2-初期化関数

3960 ワード

まず関数を見て
for inの場合、オブジェクトのプロパティ(プロトタイプのプロパティを含む)を繰り返します.たとえば、次のようなコードがあります.
var array = [];
array.push(1);
array.push(2);
array.push(3);
for(var i in array) {
console.log(i+":"+array[i]);
}

このとき何が出力されますか?もちろん0:1 1:2 2:3ですがfor inの前にArrayを付けるとprototype.say = “hello”; 再実行すると何が出力されますか?0:1 1:2 2:3 say:hello
見たでしょう、この時、それは原型の属性を出力します多くの時、私たちはその原型の属性を遍歴する必要はありません.もう一つの原因は、私たちが今使っているオブジェクト、私たちは保証できません.他の開発者は、その原型にいくつかの属性を加えていますか?では、オブジェクトのプロパティをフィルタしましょう.このときhasOwnPropertyメソッドを使用しました.次のようにします.
for(var i in array){
if(array.hasOwnProperty(i)) {
console.log(i+":"+array[i]);
}
}

二、初期化関数
ソースコードには次のように書かれています.
    jQuery = function( selector, context ) {
        return new jQuery.fn.init( selector, context, rootjQuery );
    },

一目でこれを見た私は愚かだった......第二にこれを见ると私はまだ愚かです......いいえ、まずこれを簡略化しなければなりません.
1、私達の正常な考え方によってこのように書くべきです
var jQuery = function(){
}

jQuery.prototype = {
    name : function(){};
    age  : function(){};
}

var jq = new jQuery();
jq.name();

jqueryではこう書いてあることはよく知られています
jQuery.name();

jQueryが返すべきはインスタンスオブジェクトだと想像できます.そう書けば、理解しやすいです.
var jQuery = function(){
    return new init();
}

jQuery.prototype = {
    name : function(){};
    age  : function(){};
}

var init = function(){
}

init.prototype = jQuery.prototype;

jQueryソースコードにはこう書かれています
var jQuery = function( selector, context ) {
        return new jQuery.fn.init( selector, context, rootjQuery );
}

jQuery.fn = jQuery.prototype = {
    init: function( selector, context, rootjQuery ) {}
}

jQuery.fn.init.prototype = jQuery.fn;

WTF!!!