Объяснение
Итак, во-первых, ваши две строки кода создают функцию obj
и назначают ее прототипу {x: 5}
.
Когда вы создаете экземпляр этого объект, он, по-видимому, имеет внутреннюю ссылку на прототип, который существовал, когда он был new
'd.
. После этого вы переназначите прототип на {y: 6}
, который не влияет на внутренний instance1
ссылка на первый прототип.
Затем, когда вы создаете instance2
, он имеет внутреннюю ссылку на 2-й прототип, и поэтому запись в них приведет к 5, undefined, undefined, 6
.
# 4
Вы могли бы вместо переназначения прототипа новому объекту:
obj.prototype = {y: 6};
Изменить вместо этого прототип:
delete obj.prototype.x; // Setting to undefined should produce same behaviour
obj.prototype.y = 6;
Это приведет к выходу: undefined, 6, undefined, 6
Я тестировал это с помощью http://jsfiddle.net/9j3260gp/ в последних версиях Chrome и Firefox в Windows.