gpt4 book ai didi

使用 setPrototypeOf 的 javascript 继承

转载 作者:行者123 更新时间:2023-11-30 20:02:23 26 4
gpt4 key购买 nike

我读了here我们可以使用Object.create来实现继承

这是一个继承自 ShapeRectangle 示例

function Shape() {}

function Rectangle() {
Shape.call(this);
}

Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle;

var rect = new Rectangle();

我想知道使用 Object.setPrototypeOf 而不是 Object.create 是否正确?

function Shape() {}

function Rectangle() {
Shape.call(this);
}

Object.setPrototypeOf(Rectangle.prototype, Shape.prototype);

var rect = new Rectangle();

如果它是正确的,那么我想知道为什么这么多示例显示继承自 Object.create,因为在使用此方法时您需要担心 constructor 属性。

有了 Object.setPrototypeOf,您不需要重新定义 consctrutor 属性,我发现它更安全、更简单。

最佳答案

有时您的代码可能依赖于 constructor 属性,它允许您访问构造函数而无需明确知道其函数名称。但除此之外,还有 no real need设置它。

例如,instanceof 运算符不依赖于它。

如果您不需要在自己建议的解决方案中考虑它,那么您在 Object.create 解决方案中也不需要它。

首选 Object.create 方法的原因是 Object.setPrototypeOf 可能会影响代码的效率,正如 mdn documentation 中所警告的那样. Object.create 方法不会发生这种情况。

关于使用 setPrototypeOf 的 javascript 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53242053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com