продвижение int в unsigned int в C и C #

Согласно спецификациям ECMA Script 5 ,

Значение свойства prototype используется для инициализации внутреннего свойства [[Prototype]] для вновь созданного объекта перед тем как объект Function вызывается как конструктор для этого вновь созданного объекта.

blockquote>

Понятно, что prototype просто инициализирует свойство [[Prototype]]. Когда мы создаем объект, [[Prototype]] устанавливается как объект prototype функции конструктора и устанавливается цепочка прототипов. В вашем случае, когда вы делаете

var obj = function() {};
obj.prototype.x = 5;

var instance1 = new obj();

, [[Prototype]] выглядит так

console.log(Object.getPrototypeOf(instance1));
# { x: 5 }

(Да, вы можете получить доступ к [[Prototype]] с помощью Object.getPrototypeOf]

Итак, когда JS Engine ищет x в instance1, он находит значение как 5, а поскольку y не определен, он использует undefined.

Во втором случае

obj.prototype = {y: 6};

var instance2 = new obj();

вы меняете объект prototype объекта obj, так что новые объекты, построенные с помощью этих функций, будут использовать новый объект, назначенный ему. Таким образом, [[Prototype]] выглядит так: instance2

console.log(Object.getPrototypeOf(instance2));
# { y: 6 }

Вот почему instance2 не смог найти в нем x, но y.

Чтобы ответить на обновленный вопрос,

EDIT: Как я могу изменить прототип всех экземпляров?

blockquote>

Вы можете изменить , прототип старого объекта с Object.setPrototypeOf, как это

Object.setPrototypeOf(instance1, {
    y: 6
});

Так как это [[Prototype]] instance1 отличается от instance2, мы можем просто обновить функцию конструктора prototype, например

delete obj.prototype.x;
obj.prototype.y = 6;

Теперь мы не изменили внутреннего свойства как instance1, так и instance2. Мы можем проверить, что так

console.log(Object.getPrototypeOf(instance1) === Object.getPrototypeOf(instance2));
# true
console.log(Object.getPrototypeOf(instance1) === obj.prototype);
# true

Примечание: Соглашение должно называть функции-конструкторы с начальной буквой заглавной буквой.

13
задан Ronan Boiteau 16 January 2018 в 13:35
поделиться