2012-01-06 102 views
1

考慮休耕例如:JavaScript的原型繼承和構造

function A(obj) { 
} 

B.prototype = new A; 
B.prototype.constructor = B; 

function B(obj) { 
    A.call(this, obj); 
} 

其中B應該從A繼承原型這段代碼是否正確?爲什麼在分析腳本時調用函數A一次,而沒有聲明A或B的任何實例?是因爲下線嗎?

B.prototype = new A; 

如果是這樣,B如何在不調用定義中的函數A的情況下繼承A?

回答

4

可避免再次呼籲,如果你使用的Object.create

B.prototype = Object.create(A.prototype) 

的Object.create創建具有給定參數爲原型(實際原型,而不是「原型」屬性)的新對象。它在舊版瀏覽器中不存在(IE < 8,FF < 4),但如果您願意,您可以(爲我們的目的)創建您自己的版本。其基本思路正是建立一個版本的A,什麼也不做(因此可以稱爲wihthout期望的副作用)

if(!Object.create){ 
    Object.create = function(proto){ 
     var F = function(){}; 
     F.prototype = proto; 
     return new F(); //BTW, always use parenthesis when calling new. It looks better. 
    } 
} 

你能做的就是從來不把邏輯的構造函數中,而是另一種東西把它放在一個單獨的init之後必須調用的方法。