2013-12-16 58 views
3

我見過很多例子看起來像這樣:JavaScript中的.call是否將自身綁定到調用對象?

function MyThing() { 
    SomeObj.call(this); 
} 

我明白.CALL是調用someObj中與MyThing的this的情況下。我不明白的是這是否也將SomeObj的原型綁定到MyThing?

我已經看到實現的方式是通過使用節點中的流。

util.inherits(MyStream, Transform); 

function MyStream() { 
    Transform.call(this); 
} 

MyStream.prototype._transform = function (chunk, encoding, done) {} 

var test = new MyStream(); 

爲什麼我們必須撥打Transform.call(this)?這基本上取代了必須先創建new Transform(),然後使用util.inherits?

+0

http://blog.slaks.net/2013-09-03/traditional-inheritance-in-javascript/ – SLaks

+0

另外,從Transform Node doc:'在擴展Transform類的類中,確保調用構造函數,以便緩衝設置可以正確初始化。「 – doremi

回答

4

否;你仍然需要撥打util.inherits()

調用superconstructor的要點正是–在該構造函數中運行任何邏輯,初始化實例基類。
它與原型無關,雖然superconstructor很可能假設this繼承了它的原型。

+0

OHHHHHHHHHHH。 DERP。所以當我創建一個新的MyStream時,因爲它是一個繼承的Transform類,我還想確保我調用了Transform構造函數,就像我直接初始化一個新的Transform一樣。謝謝。 – doremi

+0

[此博客文章可以幫助你更好地理解'this'。](http://blog.ponyfoo.com/2013/12/04/where-does-this-keyword-come-from) – bevacqua

+0

[此博客文章可能幫助你更好地理解繼承](http://blog.slaks.net/2013-09-03/traditional-inheritance-in-javascript/)。 – SLaks

相關問題