すべてのオブジェクトにはprototype
プロパティがあります。これは、他のオブジェクトがプロパティを継承できる単なるオブジェクトです。投稿したスニペットは、いくつかのプロパティ ( などinit
) を持つオブジェクトをprototype
ofに割り当てるだけjQuery
で、エイリアスは短くて入力しやすいためjQuery.prototype
ですjQuery.fn
。fn
jQuery を一時的に忘れてしまった場合は、次の簡単な例を検討してください。
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function () {
alert(this.name + " says hello");
};
var james = new Person("James");
james.sayHello(); // Alerts "James says hello"
この例でPerson
は、 はコンストラクター関数です。オペレーターで呼び出すことでインスタンス化できます。new
コンストラクター内では、this
キーワードはインスタンスを参照するため、すべてのインスタンスに独自のname
プロパティがあります。
はすべてのインスタンス間prototype
でPerson
共有されます。したがって、 のすべてのインスタンスにPerson
は、から継承するsayHello
メソッドがあります。メソッドを のプロパティとして定義することで、メモリを節約しています。メソッドの独自のコピーのすべてのインスタンスを(コンストラクター内に割り当てることによって) 簡単に与えることもできますが、それはそれほど効率的ではありません。Person.prototype
sayHello
Person.prototype
Person
this.sayHello
jQuery では、$
メソッドを呼び出すと、実際には次のインスタンスが作成されますjQuery.prototype.init
(覚えておいてjQuery.fn === jQuery.prototype
ください)。
return new jQuery.fn.init(selector, context, rootjQuery);
そして、あなたが見ればjQuery.fn.init
:
jQuery.fn.init.prototype = jQuery.fn;
実際には、 でjQuery
宣言されているすべてのメソッドにアクセスできるのインスタンスを作成していますjQuery.prototype
。前に説明したように、これは の各インスタンスでこれらのメソッドを宣言するよりもはるかに効率的ですjQuery
。