Почему Function.x работает после объявления Function.prototype.x? - PullRequest
3 голосов
/ 17 марта 2012

Насколько я понимаю, свойство прототипа функции - это способ добавления методов / свойств ко всем объектам, созданным из этой функции.

Так что, когда я пытаюсь что-то вроде этого

function Person(){}
Person.prototype.saySomething = function(){ alert( "hi there" ); }

Person.saySomething();

Я получаю сообщение об ошибке «Person.saySomething не является функцией», что имеет смысл, поскольку я не выполняю функцию на экземпляре объекта Person.

Но почему работает запуск приведенного ниже кода?

Function.prototype.sayHi = function(){ alert( "hi!" );}

Function.sayHi();

1 Ответ

5 голосов
/ 17 марта 2012

Сначала необходимо создать экземпляр Person:

new Person().saySomeThing();

Методы / свойства прототипа наследуются только при создании экземпляра конструктора через new ключевое слово.

Function.sayHi() работает, потому что конструктор Function является и функцией.

...