我看到了两种不同的模式和解释。一个来自DailyJS和许多其他: Rectangle.prototype = new ();
然后是克罗克福德的这里,它意味着Rectangle.prototype = Shape;
从理论上讲,你为什么要运行“新”呢?是的,它运行构造函数。它还指定矩形的原型,形状的原型。但是,我们应该能够进行继承,只需将父节点简单地分配到原型中即可。
我想知道原因是否是原型链。看起来,在第1种情况下,它将创建一个原型链。这意味着矩形原型将具有形状 prototype 。在第二种情况下,矩形的原型将只包含Shape的方法,而不是Shape的 prototype 方法。
是那么回事吗?非常感谢你的想法。
发布于 2012-10-26 14:54:44
克罗克福德,这意味着只有
Rectangle.prototype = Shape;
我真的看不出来。
从理论上讲,你为什么要运行“新”呢?是的,它运行构造函数。
但是我们实际上不需要(想)
它还指定矩形的原型,形状的原型。
不怎么有意思。new Shape创建了一个继承自Shape.prototype的新对象,这才是我们关心的问题。你说得对。
在第二种情况下,矩形的原型只会有形状的方法,而不是形状的原型方法。
是的,没错。您应该从Shape.prototype继承--但是应该通过Object.create(Shape.prototype)继承,而不是通过创建实例。见JavaScript继承: Object.create与new或在这里使用'new‘关键字的原因是什么?。这就是克罗克福德实际上所做的--甚至在Object.create被EcmaScript 5.1引入之前,他就发现了一种用他的助手函数来实现这个功能的聪明方法。
function object(o) {
function F() {}
F.prototype = o;
return new F();
}这是目前Object.create在不支持本机支持的浏览器中常见的空白。
https://stackoverflow.com/questions/13089250
复制相似问题