В MDN говорится
Обратите внимание, что свойство __proto__ может быть переопределено даже у объекта Object.prototype, если новая цепочка заканчивается null
Однако, при попытке выполнить код из примера
var b = {};
Object.prototype.__proto__ =
Object.create(null, // [[Prototype]]
{ hi: { value: function() { alert('hi'); } } });
b.hi();
я получаю ошибку в хроме (версия 63.0.3239.132 x64)
Uncaught TypeError: Immutable prototype object '#
Ответ
Последняя на данный момент спецификация говорит, что
The Object prototype object is the intrinsic object %ObjectPrototype%. The Object prototype object is an immutable prototype exotic object
Это нововведение ES7 (aka ES2016). Встроенный прототип объекта Object.prototype на данный момент Immutable Prototype Exotic Objects у которого внутренний слот [[prototype]] заблокирован.
Предполагается, что это предотвратит вставку посредника в глобальный механизм поиска, см. этот коммит для более детальной информации. Это реализовано в V8
перевод ответа @Bergi
Небольшое пояснение можно найти по ссылкам из issue. В примере
foo,bar,123
В этом примере был вывод: "data=foo" и "data=bar". Позволило бы изменить текущей странице значения используемые в загружаемом скрипте.
Комментариев нет:
Отправить комментарий