Нет "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
чтобы гарантировать, что метод не перечислим.