如果我沒有通過原型鏈鏈接兩者,如何'查看'test1和Obj2 istance?
方法沒有綁定在JavaScript中。當您編寫以下任一項時:
o.method(x);
o['method'](x);
將'o'的值賦給方法內的'this'。但!如果分離,從物體的功能,並直接調用它:
m= o.method;
m(x);
參考,以「O」丟失,並調用該方法,就好像它是一個普通的老功能,具有全局對象「本次」。與之相似,如果移動功能到另一個對象,有稱之爲:
o2.method= o.method;
o2.method(x);
那麼「這個」將是「O2」,而不是「O」。對於具有一流功能的語言而言,這是非常奇怪的行爲,並且非常直觀,但這是您的JavaScript。
如果您希望能夠使用綁定方法,則需要創建自己的方法,通常使用閉包。請參閱ECMAScript 3.1中提出的「Function.bind」方法或許多框架中的類似實現。
所以無論如何:
this.ob = Obj1;
this.ob(par);
這正在OBJ1作爲一個函數和變成上「這」的方法,它是一個OBJ2實例。所以當Obj1被調用時,它自己的'this'也是Obj2,這就是它寫入它的參數'this'。同樣可以寫得更簡單明瞭:
Obj1.call(this, par);
你是否故意這樣做?它可以用作一種繼承,在你自己的類上調用另一個類的構造函數,並且這個方法在一些JS面向對象教程中講授。然而,這並不是一個很好的方式,因爲你最終會得到同一個屬性的多個副本;使用原型可以節省您的時間,並按照預期在超類過濾器上進行屬性更新。