Кто может объяснить, почему результаты этих двух приставок совпадают?
Это функция-конструктор, и у нее есть два объекта-экземпляра, затем я меняю их с разной глубиной, но результат я не могу понять. Если кто-то столкнется с этой проблемой, надеюсь, вы можете мне помочь, спасибо.
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
по-прежнему указывает на тот же объект.