この問題は、実際には jQuery ソース コードを分析しているときに発生します。var ret = jQuery.merge(this.constructor(), elems );
、this.constructor() が返すものは次のとおりです。 init メソッドによって作成された空のインスタンス オブジェクト。したがって、この方向性については迷っています。
以下はテストコードです:
ここでconstructor()を直接呼び出すと、thisのポインタが変化し、新しいオブジェクトが自動的に作成されるのはなぜですか? constructor() メソッドの内部実装はこれに影響しますか?
これと
constructor()
方法的内部实现没有什么关系,其实就是函数内this指向的问题。当函数作为对象的属性调用的时候,
this
指向这个对象;当函数直接调用的时候,在非严格模式下,
this
指向window
;p1.constructor
指向的就是Person
函数,当调用p1.constructor();
时,Person
是作为p1
的属性调用的,所以this
指向p1
;当调用var p2 = p1.constructor;p2();
时,其实就相当于直接调用Person();
,所以this
指向window
。