我已经阅读了关于javascript原型并阅读了一些stackoverflow问题以及how-does-javascript-prototype-work,我终于正确理解了原型,但后来我正在浏览Mozilla Developer Netork(MDN)关于原型的文档 Details_of_the_Object_Model MDN
在那之下有一个注释
注意:直接分配给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__
。在哪种情况下这是真的?
有人可以用例子解释它试图传达的内容吗?
答案 0 :(得分:1)
函数原型用作 proto ,用于由这些函数生成的对象。
函数 proto 指向Function.prototype,因为函数本身也是一个对象实例。设置它的 proto 不会影响它的原型,但重新设置它的原型确实会影响原型。构造函数
您不应将Child.prototype设置为Parent的实例,而是使用Object.create。
这里解释了什么prototype.constructor以及更多内容:Prototypical inheritance - writing up