Почему в JavaScript typeof Function.prototype является «функцией», а не «объектом», как другие объекты-прототипы? - PullRequest
19 голосов
/ 01 февраля 2011
console.log(typeof String.prototype); // object
console.log(typeof Number.prototype); // object
console.log(typeof Object.prototype); // object
console.log(typeof Boolean.prototype); // object

console.log(typeof Function.prototype); // function

Почему typeof Function.prototype возвращает "функцию", а не "объект", как другие объекты-прототипы?

Спасибо!

Ответы [ 4 ]

17 голосов
/ 01 февраля 2011

Кажется, это определено в ECMAScript 5 :

15.3.4 Свойства объекта-прототипа функции

Объект-прототип Function сам по себе является объектом Function (его [[Class]] равен "Function" ), который при вызове принимает любые аргументы и возвращает undefined .

4 голосов
/ 05 апреля 2017

Упоминается в ECMAScript2015

http://www.ecma -international.org / ecma-262 / 6.0 / # sec-properties-of-the-function-prototype-object :

Th Объект-прототип функции указан как функциональный объект для обеспечения совместимости с кодом ECMAScript, который был создан до спецификации ECMAScript 2015.

Этот функциональный объект на самом деле не являетсяделать все, что предназначено для функционального объекта.Вы можете вызывать его с любыми аргументами, и он возвращает неопределенное значение.Это тупой вывод.функциональный объект.Это нормальный прототип объекта.

И поскольку он существует только по соображениям совместимости, у него даже нет свойства prototype .

Более подробно, вы можете обратиться к этому ответу: введите описание ссылки здесь

0 голосов
/ 10 апреля 2016

Потому что функция - это нативный объект, который среди других свойств имеет внутренние свойства [[Construct]] и [[Call]], а также явное свойство prototype - ссылку на прототип будущих объектов. И его класс является функцией.

F.[[Class]] = "Function"
F.[[Call]] = <reference to function> // function itself

Таким образом, [[Call]], кроме свойства [[Class]] (которое равно «Function»), является основным в отношении различения объектов. Поэтому объекты, имеющие внутреннее свойство [[Call]], называются функциями. Оператор typeof для таких объектов возвращает значение «function».

см. Для справки

0 голосов
/ 27 февраля 2015

Поскольку он имеет все методы и свойства, которые должна иметь любая функция, это делает ее эффективной функцией ...

Подумайте об этом на мгновение, и пусть он утонет, и вы получите изображение к тому времени :)

...