Пример от: “JavaScript - хорошие части”

Какое "уродство" следующее решает? Существует что-то, что я не получаю, и я ценил бы справку, понимающую, каково это.


Например, путем увеличения Function.prototype, мы можем сделать метод доступным для всех функций:

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

Путем увеличения Function.prototype с методом метода мы больше не должны вводить имя опытного свойства. Тот бит уродства может теперь быть скрыт.

7
задан Matrym 1 June 2010 в 06:39
поделиться

1 ответ

Ну, уродство субъективно, но давайте посмотрим.

Обычно пишут:

function Foo () {}
Foo.prototype.method1 = function ()  { /*...*/ };
Foo.prototype.method2 = function ()  { /*...*/ };

Вы расширяете прототип объекта функцией конструктора со свойствами, которые вы хотите передать по наследству экземплярам, созданным оператором new.

Например, с помощью var obj = new Foo(); вы создаете экземпляр конструктора Foo, этот объект унаследует все свойства, связанные с объектом Foo.prototype и другими объектами выше в цепочке prototype.

Метод Крокфорда делает то же самое, этот метод определен в объекте Function.prototype, все функции наследуют от этого объекта, поэтому вы можете вызвать метод следующим образом:

function Foo () {}
Foo.method('method1', function () { /*...*/ });
Foo.method('method2', function () { /*...*/ });

По сути, он просто скрывает слово prototype из кода, которое Крокфорд считает уродливым...

"JavaScript The Good Parts" - действительно хорошая книга, но я думаю, что она основана на личном восприятии языка Дугласом Крокфордом.

Я согласен с ним во многом, но я также не согласен с некоторыми аспектами...

15
ответ дан 6 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: