【发布时间】:2012-03-12 21:36:52
【问题描述】:
我有一个对象:
function Shape(color, position, coordinates){
this.color = color;
this.position = position;
this.coordinates = coordinates;
this.shrink = function(){
reduce(coordinates);
};
};
许多对象中的一个与前一个对象具有“是”关系。
function Sphere(color, position, coordinates, radius){
this.radius = radius;
this.role = function(){
move(coordinates);
};
};
还有一个单独的绘制形状的绘图函数
function draw(shape){
moveTo(shape.position);
setColor(shape.color);
sketch(shape.coordinates);
};
我知道我应该尽可能尝试使用组合,但在某些情况下,例如上述情况,继承是一种更合适的模型。
如果没有框架,我如何尽可能简单地使用原型继承或任何其他形式来继承形状的功能和属性,这样我就不必为我创建的每种形状类型重新定义它们并且能够将参数传递给继承者对象的构造函数,因此它们被传递给被继承的对象。
编辑
我搜索了标题相似的帖子,但没有一个提供关于我的具体情况的示例,在构造函数中传递参数以及继承变量和函数。此外,我发现关于这个主题的答案倾向于提供多种选择,我正在寻找关于标准方法的更明确的答案(例如)
关于所谓的明确答案Performing inheritance in JavaScript,我发现如果我要按照原型函数中的描述定义我的所有属性,我的脚本会一团糟,而且它也没有说明如何处理传递给的参数构造函数。
【问题讨论】:
-
@Ajai,“......你肯定可以猜到这个(原型设计)......”你到底是什么意思?因为构造函数的标准原型属性只允许您定义“类变量”(如果我可以使用这个术语,因为缺少更好的术语)。
-
为了公平起见,这个问题相当有用且清晰。另一方面,它没有显示出任何研究成果。
-
@whatsthebeef:注意在构造函数中设置方法时的语法错误;您已经颠倒了
function和方法名称。由于您将属性设置为匿名函数,因此它应该是this.shrink = function() {...}。更好的是,在原型上设置方法:Shape.prototype.shrink = ...。 -
... CMS 对“在 Javascript 中执行继承”的回答是权威性的。发布相同的问题,希望得到不同的答案并不是 SO 的工作方式;它应该是一个巨大的常见问题集合。小心你的语气; Ajai 可能不友善,但这并没有让你允许称呼他的名字。
标签: javascript inheritance prototypal-inheritance