0

这是一个构造函数,它有两个实例对象,然后我将它们更改为不同的深度,但结果我无法理解。如果有人遇到这个问题,希望你能帮助我,谢谢。

let C = function () {}
C.prototype = Object.create({
  option: {
    name: 'c'
  }
})

let c1 = new C()
let c2 = new C()

c1.option.name = 'new_c'
console.log(c2.option.name)
// --> new_c

c1.option = null
console.log(c2.option.name)
// --> new_c

4

1 回答 1

0

当你从一个对象中读取一个属性,而该对象没有那个属性时,JavaScript 会查找原型链。

当您将属性写入对象时,它只会被写入该对象。它不会在原型链上查找它是否存在,然后在链上进一步覆盖该值。

于是c2.option.name就找不到optionc2,看原型就搞定了C.prototype。然后它从中读取name

c1.option = null替换optiononc1但不触及optiononc2所以c2.option仍然指向同一个对象。

于 2019-11-12T12:24:25.400 回答