如從OOPS基,我總是使用繼承作爲代碼重用的有力工具,爲什麼Javascript默認不支持繼承?
實施例,如果我寫在OOPS棋程序,當我實施is-a
關係爲,
Class Piece{
int teamColor;
bool isLive;
Positon pos;
int Points;
.......
int getTeamColor(){....}
.......
};
Class Rook extend Piece{ //`is-a`
...... // No getTeamColor() definition here.. because the parent has the definition.
};
Class Pawn extend Piece{ //`is-a`
......// No getTeamColor() definition here.. because the parent has the definition.
};
我可以在JavaScript中使用has-a
關係,但我看到的缺點是, 我必須重新定義派生類中的每個函數。
例:getTeamColor的重新定義(在每一個車,馬,卒,王再)......等。
var Pawn = function(teamColor,pos){
var piece = new Piece(teamColor,pos);
.......
this.getTeamColor = function(){
return piece.getTeamColor();
};
}
我的問題是,爲什麼 多年平均值的JavaScript支持經典的繼承作爲默認選項?
看看jOOPL(http://joopl.codeplex.com)。它是一個100%JavaScript面向對象的庫,它增強了支持基於類的OOP的語言。因此,它具有繼承性和多態性(以及更多的功能)。我即將在幾天內發佈新版本並進行更多改進。 – 2013-04-28 08:36:02
JavaScript支持繼承*,如果你使用它*。查找「JavaScript原型鏈」。至於「爲什麼JavaScript不支持經典繼承作爲默認選項?」 - 因爲這就是JavaScript的定義。爲什麼Java沒有Traits但是Scala呢?爲什麼Python支持MI,儘管Ruby不支持?爲什麼C++沒有Dylan的Multiple Dispatch呢?爲什麼埃菲爾允許LSP的斷開?那麼,他們是*不同的語言*並聲稱一個是適當的 - 通過間接手段的「經典」 - 是否認另一種方法是(或更多)是有效的。 – user2246674 2013-04-28 08:37:25
來自Mozilla開發者網絡的關於javascript對象模型細節的全文。 [鏈接到這裏](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Details_of_the_Object_Model)。本文介紹繼承,層次和關係,同時在Java(基於類)和Javascript(基於原型)之間進行比較。 – 2013-04-28 09:08:49