首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript链: Rectangle.prototype = new ()还是Rectangle.prototype = Shape?

javascript链: Rectangle.prototype = new ()还是Rectangle.prototype = Shape?
EN

Stack Overflow用户
提问于 2012-10-26 14:51:47
回答 1查看 780关注 0票数 0

我看到了两种不同的模式和解释。一个来自DailyJS和许多其他: Rectangle.prototype = new ();

然后是克罗克福德的这里,它意味着Rectangle.prototype = Shape;

从理论上讲,你为什么要运行“新”呢?是的,它运行构造函数。它还指定矩形的原型,形状的原型。但是,我们应该能够进行继承,只需将父节点简单地分配到原型中即可。

我想知道原因是否是原型链。看起来,在第1种情况下,它将创建一个原型。这意味着矩形原型将具有形状 prototype 。在第二种情况下,矩形的原型将只包含Shape的方法,而不是Shape的 prototype 方法。

是那么回事吗?非常感谢你的想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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引入之前,他就发现了一种用他的助手函数来实现这个功能的聪明方法。

代码语言:javascript
复制
function object(o) {
    function F() {}
    F.prototype = o;
    return new F();
}

这是目前Object.create在不支持本机支持的浏览器中常见的空白。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13089250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档