В 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
возвращает "функцию", а не "объект", как другие объекты-прототипы?
Спасибо!
Ответы
Ответ 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 для таких объектов возвращает значение функции.
см. ссылку