jQueryソースコードの最初のステップを見ると、jQueryオブジェクトの作成について混乱しました。長い間それについて考えた後、私はついにそれを感じました。ここで私はそれを録音します
最初の方法:
var a = function(){return a.prototype.init();} a.prototype = {init:function(){this.age = 50; console.log(this); return this;}、age:100} console.log(a()=== new a());1.結果が当てはまる理由
a.prototype.init()関数は、a()によって内部的に呼ばれます
新しいa()はコンストラクターを内部的に呼び出し、そのコンストラクターはfunction(){return a.prototype.init();}であり、同じ呼び出しはa.prototype.init()関数です
2.分析a.prototype.init()関数が返されるもの
これに依存し、これが誰を指し示すかを決定します。関数を呼び出すときに分析する必要があります。プロトタイプオブジェクトの属性と呼ばれるため、これはプロトタイプオブジェクトA.prototypeです
この作成方法では、A()を何回呼び出しても、実際には同じオブジェクトが返されているため、オブジェクトBの変更はオブジェクトAに影響します。以下の図を参照してください。
var a = a(); var b = a(); console.log(a.age); console.log(b.age); b.age = 22; console.log(a.age); console.log(b.age); console.log(b.age);
では、この問題を解決する方法は? jQueryが使用する方法でもある2番目の方法について話しましょう。
2番目の方法
var a = function(){return new a.prototype.init(); //①} a.prototype = {init:function(){this.age = 50; console.log(this); return this;}、age:100}a.prototype.init.prototype = a.prototype; //
①および②の分析
新しいa.prototype.init()に、主に3つのことを行います
空のオブジェクトを作成するvar obj = {};
obj object property_proto_関数のプロトタイプを指しますa.prototype.init;
a.prototype.init関数でこれをOBJオブジェクトに置き換えます。A.prototype.initfunction、a.prototype.init.call(obj)を呼び出し、新しいオブジェクトを返します
返されたオブジェクトのプロトタイプはa.prototype.init.prototypeであるため、A.prototypeとは何の関係もありません。 A.Prototypeから新しく返されたオブジェクトを継承するようにするために、a.prototype.init.prototypeをA.prototypeに指しさせます
したがって、2番目の方法は、インスタンスを作成し、独自の範囲のそれぞれが独立していることを確認することです。
上記は、編集者が紹介したJavaScriptの新しい構造の例の詳細な説明です。それがあなたを助けることを願っています。詳細情報を知りたい場合は、wulin.comのWebサイトに注意してください!