关于在Mozilla开发人员网络中定义的javascript原型解释的困惑

时间:2014-10-16 07:27:24

标签: javascript prototype

我已经阅读了关于javascript原型并阅读了一些stackoverflow问题以及how-does-javascript-prototype-work,我终于正确理解了原型,但后来我正在浏览Mozilla Developer Netork(MDN)关于原型的文档 Details_of_the_Object_Model MDN

Prototype diagram

在那之下有一个注释

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

我似乎无法理解这句话的含义

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

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

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

它会产生员工意味着什么?我知道我们不应该直接使用__proto__,但上述语句指定使用FunctionName.prototype.__proto__。在哪种情况下这是真的?

有人可以用例子解释它试图传达的内容吗?

1 个答案:

答案 0 :(得分:1)

函数原型用作 proto ,用于由这些函数生成的对象。

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

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

这里解释了什么prototype.constructor以及更多内容:Prototypical inheritance - writing up