Function.prototype
С Язык ECMAScript
Спецификация :
15.3.3.1 Function.prototype
Начальное значение Function.prototype:
Функция прототипа объекта (раздел
15.3.4).
15.3.4 Свойства объекта-прототипа функции
Функция
Объект-прототип сам по себе является функцией
объект (его [[Class]] равен «Function»)
что при вызове принимает любой
аргументы и возвращает неопределенные.
значение внутреннего [[Prototype]]
свойство функции-прототипа
объект является прототипом объекта Object
(раздел 15.3.2.1).
Это функция с «пустым телом»;
если он вызывается, он просто возвращает
не определено. Функциональный прототип
объект не имеет значения
собственное имущество; однако это
наследует свойство valueOf от
Прототип объекта Объект.
Я получаю этот вывод:
- Опера: function () {[собственный код]}
- Chrome: функция Пусто () {}
- IE7: prototype () {[native code]}
- FF3: function () {}
Chrome и IE7 назвали свои функции, Opera и IE7 сообщают вам, что не раскрывают реализацию. Все они согласны с этим:
nl(typeof Function.prototype); //function
Сравните это с:
nl(typeof Object.prototype); //object
nl(typeof Array.prototype); //object
nl(typeof String.prototype); // object
Function.prototype.prototype
Я получаю undefined от Opera и IE7, null от Chrome и [объект] от FF3. Кто прав? Поскольку «Объект-прототип Function сам по себе является объектом Function», не должно ли это быть круговой ссылкой на самого себя? Чтобы избежать круговой ссылки, они выбрали разные пути. Я не знаю, есть ли стандарт для этого или это до реализации, но я думаю, что объект является правильным. Кстати, здесь вы видите разницу между внутренним [[prototype]] и публичным прототипом в действии, как вы и задавали в предыдущем вопросе!
Function.prototype.prototype == Object.prototype
Это неверно, потому что это не тот же объект. Смотри выше.
Function.prototype.prototype.prototype
Только FF даст вам ответ, поскольку их реализация Function.prototype.prototype возвращает объект.
Я согласен, что ваш предложенный вывод выглядит более логичным.
Они согласны с этим:
nl(Object.prototype); // [object Object]
nl(Object.prototype.prototype); // undefined