Когда вы переназначаете объект-прототип, другим объектам, созданным из этой функции, не будут изменены их внутренние цепочки прототипов, если вы явно не скажете Javascript сделать это - по уважительной причине, может быть очень дорогим :
Предупреждение : Изменение [[Prototype]] объекта по характеру того, как современные двигатели JavaScript оптимизируют доступ к свойствам, в настоящее время является очень медленной операцией в каждый браузер и JavaScript движок. Кроме того, эффекты изменения наследования являются тонкими и обширными и не ограничиваются просто временем, потраченным в операторе Object.setPrototypeOf (...), но могут распространяться на любой код, который имеет доступ к любому объекту, чей [ [Прототип]] был изменен.
Поскольку эта функция является частью языка, разработчикам движка по-прежнему приходится выполнять эту функцию эффективно (в идеале). Пока разработчики движка не решат эту проблему, если вы беспокоитесь о производительности, вам следует избегать установки [[Prototype]] объекта. Вместо этого создайте новый объект с нужным [[Prototype]] с помощью Object.create ().
Если у вас есть , используйте Object.setPrototypeOf
в экземпляре , так что его внутренний прототип указывает на новый объект:
const object = function() {};
object.prototype = {
name: 'XYZ'
};
const o = new object();
object.prototype = {
name: 'PQR'
}
Object.setPrototypeOf(o, object.prototype);
const result = o.name;
console.log(result);
Но, надо надеяться, это следует делать только ради теоретического упражнения. Нет смысла делать это в фактическом коде, предназначенном для выполнения sh конкретной задачи.