【发布时间】:2015-08-08 09:51:40
【问题描述】:
我想了解原型在 Javascript 中如何以及为何有用。在我以为我知道发生了什么之后,我偶然发现原型只是一个对象,不能像我想象的那样被许多对象“共享”。让我用一个例子来详细说明:
var SpritePrototype = {
img: null,
pos_x: 0,
pos_y: 0,
draw: function(context2d) {
/*do stuff with the canvas
using "this" to refer to
the object this method is
being called on*/
},
//Some more member functions...
}
从原型友好的Javascript通常提倡的“对象继承自对象”的概念,我想我可以这样做:
var player = Object.create(SpritePrototype);
但事实证明这种方法是有缺陷的,因为非函数字段将来自 SpritePrototype,因为玩家的原型正是 SpritePrototype。这意味着我无法从该原型创建更多对象,否则非函数字段将全部混淆。
那么 Object.create 的意义何在,更重要的是,实现我想要做的事情的正确方法是什么?也就是说,如何让“玩家”获取字段的副本并从其原型继承功能?
再说一次,我有兴趣按预期的方式做事。我总是可以手动模拟继承或完全跳过它。我的问题的重点是了解原型以及它们如何以及何时有用,尤其是在我的具体案例中。
【问题讨论】:
标签: javascript inheritance prototype prototypal-inheritance