Я пытался объяснить редкие случаи использования прототипного наследования со стороны коллеги, когда я был в тупике от того, что это не работает, как я ожидаю.Не следует ли присвоить свойство прототипа переопределить его на прототипе?
const baseobj = { baseproperty: 'original'};
const x = Object.create(baseobj);
//should add properties to x, not the base
x.newproperty = 'bar';
console.assert(x.newproperty != baseobj.newproperty);
//so far so good
//should modify the base, not x
x.baseproperty = 'foo';
console.assert(x.baseproperty == baseobj.baseproperty);
//this assert failed, property is on x!?
Я запутался. Насколько я понимаю, назначение - это двухэтапный процесс, один - поиск свойства, а другой - назначение ему. Итак, почему на земле поиск baseproperty
не возвращается (и, следовательно, изменяется) baseobj.baseproperty
?
Я знаю что-то вот это ключ к тому, как работают угловые сферы, но то, что конкретно происходит здесь, ускользает от меня.
Было бы плохо, если бы это сработало. Это означало бы, что присвоение собственности может неявно изменять другие объекты, которые имеют один и тот же прототип. Простейший пример: '({}). ToString = 42;'. Должно ли свойство 'toString' каждого * объекта теперь быть' 42'? –
Я не уверен, что знаю, о чем вы думаете в Angular, но если бы вы опубликовали какой-то пример, это было бы интересно. – Pointy