Нет "Function.method" в JavaScript?

Я читаю книгу Дугласа Крокфорда, и он использует конструкцию

Function.method('inherits', function(Parent){
   this.prototype=new Parent();
   return this;
});

Если оставить в покое смысл этого, я просто не могу обойти синтаксис. Я пытаюсь запустить его в Chrome, и получить

Uncaught TypeError: undefined is not a function test3.html:18
(anonymous function)

как и в случае, если я попробую ( jsfiddle)

Function.method("test", function () { return "TEST"; });

Кажется, есть сообщение, в котором говорится, что эта строка работает, но я не могу заставить ее работать. Почему это может быть?

1 ответ

Решение

Причина, по которой строка работает в посте, на который вы ссылаетесь, заключается в том, что Function.prototype был расширен с помощью метода:

Function.prototype.method = function (name, func) {
   this.prototype[name] = func;
   return this;
};

Если вы запустите приведенный выше код и только затем запустите код, который у вас есть, все будет работать - или вы можете просто изменить .method в .prototype[name_here] = и все будет работать одинаково.

Записка о лучших практиках

Если вы собираетесь продлить прототипы в этот день и возраст, лучше использовать Object.defineProperty чтобы гарантировать, что метод не перечислим.

Другие вопросы по тегам