Поскольку instance1
уже создан. Ключевое слово new
создает новый объект, выполняя функцию-конструктор, которая в вашем случае obj
.
Поскольку вы изменили прототип после инициализации первого экземпляра, вы больше не имеете того же состояния (например, прототип) конструктора и не можете создать тот же объект. Но созданные все еще существуют, ссылаясь на старый прототип.
Когда вы снова используете конструктор obj
, вы создаете еще один объект, который может быть очень грубо переведен в классический тип терминологии наследования как экземпляр другого класса.
Изменить: # 4 Эта скрипка: http://jsfiddle.net/doy3g1fh/ показывает, что
obj.prototype.y=6
преуспевает в изменении все существующие объекты. Таким образом, ответ, очевидно, заключается в том, что вы не должны назначать новый объект в качестве прототипа, а просто модифицировать текущий прототип.