javascript - 关于 Mozilla 开发者网络中定义的 javascript 原型(prototype)解释的困惑

标签 javascript prototype

我已经阅读了有关 javascript 原型(prototype)的内容,并阅读了一些 stackoverflow 问题,例如 how-does-javascript-prototype-work我终于正确地理解了原型(prototype),但是当我浏览 Mozilla Developer Netork (MDN) 上有关原型(prototype)的文档时 Details_of_the_Object_Model MDN

Prototype diagram

下面有一个注释

注意:直接分配给 FunctionName.prototype 会删除其原始原型(prototype)的“构造函数”属性。结果,(new WorkerBee).constructor 产生“Employee”(而不是预期的“WorkerBee”)。必须注意保留原始原型(prototype)的构造函数。例如,将父级分配给 FunctionName.prototype.__proto__ 。例如,WorkerBee.prototype.__proto__ = new Employee;这样,(new WorkerBee).constructor 就会产生预期的“WorkerBee”。

我似乎无法理解这句话的意思

直接分配给 FunctionName.prototype 会删除其原始原型(prototype)的“构造函数”属性。

这是否意味着Manager.prototype = new Employee将把Manager.__proto__ = Function.prototype替换为Employee.prototype

结果,(new WorkerBee).constructor 产生“Employee”(而不是预期的“WorkerBee”)

它将产生 Employee 是什么意思?我知道我们不应该直接使用 __proto__ 但上面的语句指定使用 FunctionName.prototype.__proto__。在哪种情况下这是正确的?

有人可以举例说明它试图传达什么吗?

最佳答案

函数原型(prototype)用作这些函数生成的对象的原型(prototype)

函数proto指向Function.prototype,因为函数本身也是一个对象实例。设置它的原型(prototype)不会影响它的原型(prototype),但重新设置它的原型(prototype)会影响原型(prototype)。构造函数

您不应将 Child.prototype 设置为 Parent 的实例,而应使用 Object.create。

什么是prototype.constructor以及更多内容解释如下:Prototypical inheritance - writing up

关于javascript - 关于 Mozilla 开发者网络中定义的 javascript 原型(prototype)解释的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26398550/

相关文章:

javascript - nicEdit - 在 Bootstrap 弹出窗口上编辑 HTML

C++ - 是否需要类原型(prototype)?

javascript - 对原型(prototype)链、原语和对象的困惑

javascript - 在 javascript 中,当你 new() 一个函数时会发生什么?

javascript - 如何从 JSON 字符串中提取值列表并迭代它们?

javascript - 带有 git 样式子命令的 npm 链接

javascript - 重复使用 window.open 会产生意外结果

javascript - 单击按钮时的appendChild()问题

javascript - 原型(prototype)实例如 cat c = new Animal();?

javascript - 为什么我的 addEventListner 不能用作 onclick 事件