javascript - 为什么经常使用 new Parent() 而不是 Object.create(Parent.prototype) 来初始化 child 的原型(prototype)?

标签 javascript inheritance prototype instance new-operator

Mozilla documentation page中间它从

切换(没有足够清楚的解释)示例
WorkerBee.prototype = Object.create(Employee.prototype);

WorkerBee.prototype = new Employee;

第二种形式 new Employee 将使用应该只存在于 WorkBee 实例中的属性来初始化 WorkBee 的原型(prototype)。

为什么在如此多的 JavaScript 继承示例中使用第二种形式? 为继承的属性和自己的属性赋予不同的状态不是不受欢迎的吗?

WorkBee 中 Employee 属性名称的状态与属性项目不同,因为名称是在 WorkBee.prototype.name 中定义的,而项目是在 WorkBee 实例上定义的。

一般来说,为什么有人会想要使用非抽象类 X 的构造函数来初始化 JavaScript 中派生类 Y 的原型(prototype)?

在我看来,两个构造函数都应该只用于初始化 X 和 Y 的实例,如果 Y 是从 X 派生的,那么构造函数 X 应该初始化 Y 的实例,而不是 Y 的原型(prototype)。 但是如果 X 是抽象的,这意味着我们不希望有 X 的实例,只有这样我们才有可能使用 X 构造函数作为放置派生类原型(prototype)初始化的地方。

最佳答案

Why is second form being used in so many examples of JavaScript inheritance?

因为我们没有摆脱它,它还在不断传播。另见 here一些历史。

Isn't it undesired to give different status to inherited properties vs own properties?

是的,绝对。

关于javascript - 为什么经常使用 new Parent() 而不是 Object.create(Parent.prototype) 来初始化 child 的原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39911926/

相关文章:

javascript - 当 require() 处理文件时是否必须定义 module.exports ?

c++ - 在扩展模板的类中初始化静态常量

javascript - 为什么这在 JavaScript 中评估为未定义?

c++ - 如何让派生类定义数据结构

javascript - 如何在 JavaScript 中创建自定义方法

javascript - 为什么要使用 Object.create?

javascript - 映射下拉列表选择 URL

javascript - TypeORM - 更新多对多关系抛出列不存在错误

javascript - If 条件检查两个 TextFields 值

c# - 我的基本构造函数如何访问派生实例?