2012-08-15 60 views
1

我正在JavaScript中使用原型繼承構建一個面向對象的庫。與Java和.NET類似,我的所有對象/原型都將繼承「對象」對象/原型。我想知道是否可以從派生類中調用超級對象/原型函數?JavaScript中的原型繼承...我可以稱其爲「超級」嗎?

考慮下面的代碼〔實施例:

function Object() { 
    this.DoAction = function() { 
    }; 
}; 

function CustomObject() { 
    this.DoAction = function() { 
     super.DoAction(); //How do I do this in JavaScript? 
    }; 
}; 
+2

http://www.crockford.com/javascript/inheritance.html :) – Florian 2012-08-15 21:38:43

+0

我縣'Object.create':HTTP://計算器。 COM /問題/ 2709612 /使用對象創建不是新的 – Paul 2012-08-15 21:41:28

+0

不是。 Super在原型系統中不起作用。 – 2012-08-15 21:52:30

回答

7

JavaScript沒有的super的直接等同。

一種解決方法可能是,以節省原型方法重寫它,像以前一樣:

function CustomObject() { 
    this._super_DoAction = this.DoAction; 
    this.DoAction = function() { 
     this._super_DoAction(); 
    }; 
}; 

如果你能夠使用ES5功能,您可以使用Object.getPrototypeOf擺脫原型的方法,和然後apply與當前對象執行它this

function CustomObject(){ 
    this.DoAction=function() { 
     Object.getPrototypeOf(this).DoAction.apply(this, []); 
    }; 
}