#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
метода, изменение этого возвращаемого значения не имеет никакого эффекта.