2014-03-05 3 views
0

Это просто для эксперимента. Следующий код, похоже, не может изменить Object.prototype на null.javascript change Object.prototype не работает

Object.prototype = null; 
var o = new Object(); 

Это просто потому, что это «объект» или встроенные типы? Я думаю, мы можем изменить его для пользовательских типов. Извините, если я ошибаюсь

+3

Это плохая вещь? Но в чем вопрос? Почему это только для чтения? –

+0

Просто любопытно, почему. Где моя новая ценность? Просто тихо игнорируется. Дайте исключение или ошибку, если вы считаете, что это неправильно. – leon

+1

http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.3.1, потому что спецификация говорит так. поэтому. – rlemon

ответ

2

Из MSDN
Некоторые подробнее здесь: http://msdn.microsoft.com/en-us/library/f5s9ycex(v=vs.94).aspx

Все встроенные объекты JavaScript имеют свойство прототипа, который только для чтения. Свойства и методы могут быть добавлены к прототипу, но объекту не может быть назначен другой прототип. Тем не менее, пользовательским объектам может быть назначен новый прототип. Метод и списки свойств для каждого встроенного объекта на этом языке ссылки указывают, какие из них являются частью прототипа объекта и которые нет.

Из спецификации
Некоторые подробнее здесь: http://www.ecma-international.org/ecma-262/5.1/#sec-15.2.3.1

15.2.3.1 Object.prototype

Начальное значение Object.prototype является стандартным встроенным объектом прототип объекта (15.2.4).

Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.

0

15.2.3.1 Object.prototype указывает, что:

Это свойство имеет атрибуты {[[Writable]]: ложь, [[Enumerable]]: ложь, [[Настраиваемый]]: ложь}.

и 8.6.1 Property Attributes это сказать о [[Writable]]:

Если ложь, попытки ECMAScript кода изменить [[Value]] атрибут свойства, используя [[Put]] не удастся.

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