すべてのオブジェクトにはprototypeプロパティがあります。これは、他のオブジェクトがプロパティを継承できる単なるオブジェクトです。投稿したスニペットは、いくつかのプロパティ ( などinit) を持つオブジェクトをprototypeofに割り当てるだけjQueryで、エイリアスは短くて入力しやすいためjQuery.prototypeですjQuery.fn。fnjQuery を一時的に忘れてしまった場合は、次の簡単な例を検討してください。
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.prototypesayHelloPerson.prototypePersonthis.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。