Расширение базовых типов (из JavaScript: The Good Parts) — почему возвращается значение ‘this’?

#javascript #this

#javascript #это

Вопрос:

На странице 33 автор показывает трюк, позволяющий избежать ввода ‘prototype’ при добавлении новых методов к базовым типам, за которым следует пример, который извлекает целочисленную часть числа.

 Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this; // removal of this line still yields the same result
};

Number.method('integer', function () {
    return Math[this < 0 ? 'ceil' : 'floor'](this);
});

console.log((-10 / 3).integer());
 

Результат равен -3, как и ожидалось, даже если я закомментирую возвращаемую строку this . Что делает эта строка?

Комментарии:

1. Вероятно, это так, что вы можете связать .method(/*...*/).method(/*...*/) , но я совершенно сбит с толку, почему все это было бы желательно в любом случае

2. Обратите внимание, что это странный подход к настройке прототипов, и, хотя он пытается упростить жизнь, он медленный и неуклюжий по сравнению с простым использованием классов , которых не было, когда была написана эта книга).

Ответ №1:

При вызове он возвращает объект-прототип Number.method(...) , который позволит вам связать его в цепочку: Number.method(...).method(...) .

Поскольку ваш код игнорирует возвращаемое значение при вызове method метода, изменение этого возвращаемого значения не имеет никакого эффекта.