В замены предыдущего ответа, который я не мог стоять на. Благодаря Ориолу. Головка царапин - моя.
В отношении первого вопроса объект Function это не особенно отличается просто потому, что Function.prototype
является функцией. Другие встроенные конструкторы используют прототипы объектов своего типа. То, что привлекает внимание к случаю функции, заключается в том, что оператор typeof
рассматривает объекты функции в отличие от других объектов, возвращая «функцию» вместо «объекта».
Глобальные Конструкторы листинг себя конструкторами своих объектов-прототипов:
var BuiltIn = Function; // for example
BuiltIn.prototype.constructor == BuiltIn // true
является более или менее документальный. Объекты прототипа встроенных конструкторов обычно имеют методы, которые взаимодействуют с движком javascript и не создаются с помощью вызова javascript к их указанному конструктору, как он отображается во время выполнения: Function.prototype instanceof Function
является ложным с аналогичными результатами для других встроенных конструкторов, таких как Array, RegExp и т. д.
Глобальный Function
объект уникален, однако, в том, что она перечисляет себя как свой собственный конструктор (Function.constructor == Function
правда), и что он является экземпляром себя (Function instanceof Function
верно, а). Последний результат показывает, что Function.prototype
находится в цепи прототипа Function
. Function.prototype
сам прототип на Object.prototype
.
Еще одна причина, по которой думать, что Function.prototype
не является объектом-функцией в обычном смысле (кроме того, что говорится в документации) заключается в том, что он не может быть вызван как конструктор и выдает ошибку, если делается попытка сделать это. Поскольку свойство прототипа функции используется, когда функция вызывается как конструктор, имеет смысл для Function.prototype
не иметь этого свойства.
обратите внимание, что 'функция Person() {} TypeOf Person.prototype // "объект"' – Saar
Функции также являются объектами –
Object.getPrototypeOf (Function.prototype) === Object.prototype –