Кто может объяснить, почему результаты этих двух приставок совпадают?

Это функция-конструктор, и у нее есть два объекта-экземпляра, затем я меняю их с разной глубиной, но результат я не могу понять. Если кто-то столкнется с этой проблемой, надеюсь, вы можете мне помочь, спасибо.

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

1 ответ

Когда вы читаете свойство объекта, а объект не имеет этого свойства, JavaScript будет искать цепочку прототипов.

Когда вы пишете свойство объекту, оно просто записывается в этот объект. Он не будет искать цепочку прототипов, чтобы узнать, существует ли она, а затем перезаписывать значение дальше по цепочке.

Так c2.option.name не может найти option на c2, смотрит на прототип и получает C.prototype. Затем читаетсяname От этого.

c1.option = null заменяет option на c1 но не касается option на c2 так c2.option по-прежнему указывает на тот же объект.

Другие вопросы по тегам