【发布时间】:2020-12-07 09:44:23
【问题描述】:
我正在尝试学习 JavaScript 中的继承。MDN 上的这篇文章解释了原型链的工作原理。
let f = function () {
this.a = 1;
this.b = 2;
}
let o = new f(); // {a: 1, b: 2}
f.prototype.b = 3;
f.prototype.c = 4;
有评论说
// do not set the prototype f.prototype = {b:3,c:4}; this will break the prototype chain
这将如何打破链条? .我的猜测是,因为我们正在覆盖构造函数的原型对象,所以 向上链 的所有其他引用都丢失了。但是我们可以使用 Object.create(someobject) 这不会破坏链条。
【问题讨论】:
-
我的猜测是因为我们正在覆盖构造函数的原型对象,所以所有其他向上链的引用都丢失了。不完全的。并不是说向上链参考丢失了。是您替换了当前原型,因此原型上已经存在的任何其他内容现在都丢失了。这与执行
let x = {a: 1}然后执行x = {b: 2}相同。您将分配给x的整个对象替换为不同的对象,因此当您执行console.log(x)时,其上将没有a属性。