2015-02-27 3 views
1

Этот вопрос немного педантичен. Вы заранее были предупреждены :)Почему в функции Function.prototype нет свойства прототипа?

Я заметил что-то, и я подумал поделиться им с вами. Пойдем прямо к нему.

Поскольку все функции должны иметь свойство прототипа что-й эпицентр прототип модели наследования в JS, и так как Function.prototype функция самого по себе, вы ожидали бы увидеть prototype собственностей на объекте прототипа, все функции в js получают свои методы и свойства из-за наследования, но ничего нет.

Есть ли логическое объяснение за этим решением опускаем prototype на той или иной функции или было прекращено только по стилистическим причинам, так как Function.prototype.prototype может выглядеть некрасиво для некоторых, или, может быть, prototype опора на Function конструктор, как из-за отсутствия лучшего термина бог всех прототипов в js и, следовательно, не может иметь собственный объект prototype?

Ждем ваших ответов.

Дня кодирование :)

ответ

1

Даже если ваши отчеты браузера "функция", prototypes are objects, или нуль.

+1

См. Также http://stackoverflow.com/questions/4859308/in-javascript-why-typeof-function-prototype-is-function-not-object-like-ot?rq=1 – Barmar

+0

Должен ли я затем закрыть это точный дубликат? –

+0

Да, наверное, хорошая идея. –

0

«все функции должны иметь свойство прототипа»

Это никогда не было правдой, и еще менее верно в ES6:

Array.prototype.slice.hasOwnProperty('prototype') // false 
let f =() => {} 
f.hasOwnProperty('prototype') // false 
let o = { m() {} } 
o.m.hasOwnProperty('prototype') // false 
class C { m() {} } 
(new C).m.hasOwnProperty('prototype') // false 

JavaScript различает функцию и функцию, являются конструкторами.

+0

Просим различать свойство ** OWN ** и свойство _inherited_, полученное из цепочки прототипов каждой функции. Метод 'hasOwnProperty' проверяет только собственные реквизиты и ничего больше. –

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