2016-12-10 2 views
3

Ok ребята ... У меня есть файл .js, связанный с файлом НТМ и только код в пределах .js файла является строка:Uncaught TypeError: Неизменный прототип объекта «# <Object>» не может иметь их прототип установить

Object.setPrototypeOf(Object.prototype,{x:616}); 

на загрузке страницы .htm «хром консоль» отображается сообщение об ошибке:

Uncaught TypeError: Immutable prototype object '#<Object>' cannot have their prototype set 

Я никогда не видел эту ошибку раньше и не может найти что-нибудь для него здесь или в Интернете.

Я предположил, что объект был запечатан/замороженная, так проводили тесты:

console.warn('sealed  ⇒',Object.isSealed(Object.prototype));  // false 
console.warn('frozen  ⇒',Object.isFrozen(Object.prototype));  // false 
console.warn('extensible ⇒',Object.isExtensible(Object.prototype)); // true 

Но это не проливают свет на эту проблему и как таковой оставил меня в тупик? Это первый раз, когда это произошло при настройке прототипа Object.prototype, и мне интересно, обновил ли мой браузер Chrome новые функции или что-то в этом роде ???

ответ

4

Это новое изделие в ES7 (aka ES2016). Встроенный прототип объекта Object.prototype теперь имеет Immutable Prototype Exotic Objects, у которого есть внутренний замок [[prototype]].

Предполагается, что prevent proxies from being inserted in the global lookup mechanism, см. this commit для деталей. Он имеет recently been implemented in V8.

+0

Почему не разрешено переопределять это расширение? – Pacerier

+0

@Pacerier Что вы подразумеваете под "расширениями"? Расширения браузера? – Bergi

Смежные вопросы