javaScript原型链:retectangle.prototype = new Shape()或Rectangle.prototype = Shape?

问题描述 投票:0回答:1
矩形= shape;

现在,从理论上讲,为什么您需要运行“新”?它运行构造函数函数,是的。它还为矩形的原型分配了形状的原型。但是,我们应该能够将父母简单地分配到原型中,从而实现继承。

我想知道原因是原型链接。看来,在情况1中,它将创建一个原型链。意思是,矩形原型将具有形状Prototype

。 在第二种情况下,矩形的原型将只有Shape的方法,但不具有Shape的

Prototype

方法。

是对吗?非常感谢您的想法。 克罗克福德

,这意味着

Rectangle.prototype = Shape;

javascript inheritance prototype
1个回答
4
投票
我真的看不到那个。

现在,从理论上讲,为什么您需要运行“新”?它运行构造函数函数,是的。 我们实际上不需要(想要),我们只需要从Shape.prototype



它还分配了矩形的原型。

真的。

new Shape
创建一个从

Shape.prototype

继承的新对象
,这就是我们的重要原因。你做对了。

在第二种情况下,矩形的原型将只有Shape的方法 - 但不是Shape的原型方法。
是的,这是正确的。您应该从

Shape.prototype
-而不是通过创建一个实例来继承。请参阅

javascript继承:object.create vsnew

在这里使用'new'关键字的原因是什么?这就是克罗克福德(Crockford)实际上所做的 - 甚至在Ecmascript 5.1介绍之前,他找到了一种聪明的方式来使用他的助手功能来做到这一点。

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(); }

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.