现在,从理论上讲,为什么您需要运行“新”?它运行构造函数函数,是的。它还为矩形的原型分配了形状的原型。但是,我们应该能够将父母简单地分配到原型中,从而实现继承。
我想知道原因是原型链接。看来,在情况1中,它将创建一个原型链。意思是,矩形原型将具有形状Prototype
。 在第二种情况下,矩形的原型将只有Shape的方法,但不具有Shape的Prototype
方法。是对吗?非常感谢您的想法。 克罗克福德
,这意味着Rectangle.prototype = Shape;
我真的看不到那个。现在,从理论上讲,为什么您需要运行“新”?它运行构造函数函数,是的。 我们实际上不需要(想要),我们只需要从
它还分配了矩形的原型。Shape.prototype
真的。
new Shape
创建一个从,这就是我们的重要原因。你做对了。继承的新对象
Shape.prototype
在第二种情况下,矩形的原型将只有Shape的方法 - 但不是Shape的原型方法。是的,这是正确的。您应该从
Shape.prototype
-而不是通过创建一个实例来继承。请参阅在这里使用'new'关键字的原因是什么?这就是克罗克福德(Crockford)实际上所做的 - 甚至在Ecmascript 5.1介绍之前,他找到了一种聪明的方式来使用他的助手功能来做到这一点。javascript继承:object.create vsnew
或
Object.create(Shape.prototype)
现在,这是不本地支持它的浏览器中的常见垫片。
Object.create
当我们通过扩展继承时,我们将Shape()称为
rectabgle构造函数。
为了使它们的原型连锁店解散
Rectangle.Prototype = Object.Create(shape.protype)
function object(o) { function F() {} F.prototype = o; return new F(); }