Подтвердить что ты не робот

В JavaScript, почему typeof Function.prototype является "функцией", а не "объектом", как другие объекты-прототипы?

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 возвращает "функцию", а не "объект", как другие объекты-прототипы?

Спасибо!

4b9b3361

Ответ 1

Это, по-видимому, определено в ECMAScript 5:

15.3.4 Свойства объекта Prototype Function

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

Ответ 2

Его упоминается в документе ECMAScript2015

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

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

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

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

Для более подробной информации вы можете обратиться к этому ответу: введите ссылку здесь

Ответ 3

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

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

Ответ 4

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

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

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

см. ссылку