2011-02-01 2 views
19
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» возвращает «функцию», а не «объект», как другие объекты-прототипы?В JavaScript, почему typeof Function.prototype является «функцией», а не «объектом», как другие объекты-прототипы?

Спасибо!

+4

Вы могли бы задал вопрос без всех HTML. Хороший вопрос, хотя ... –

+0

@AtesGoral Исправлено сейчас! – Taurus

+0

@Taurus Лучше поздно (6 лет), чем извините! –

ответ

17

Это, как представляется, определяется в ECMAScript 5:

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

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

+0

Спасибо за ваш ответ! =) – weilou

+0

нормально, но почему? в чем причина этого? Не может быть просто объектом? –

+0

@BarbuBarbu: посмотрите здесь: http://www.ecma-international.org/ecma-262/6.0/#sec-properties-of-the-function-prototype-object – anand

0

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

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

0

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

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

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

see for reference

4

Его упомянутые в ECMAScript2015

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

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

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

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

Для получения дополнительной разработки, вы можете передать этот ответ: enter link description here

Смежные вопросы