如从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