Что делает "вернуть это" в функцию javascript?
Интересно, что делает "вернуть это" в функцию javascript, какова его цель?
предположим, что мы имеем следующий код:
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
Что делает "return this" внутри функции?
Я знаю, что делает код выше, и каково использование ключевого слова "this". Я просто не знаю, что делает "return this" внутри функции.
Ответы
Ответ 1
Он ссылается на экземпляр объекта, на который в данный момент вызывается метод. Он используется для цепочки. Например, вы можете сделать что-то вроде этого:
myObject.foo().bar();
Так как foo
возвращает this
(ссылка на myObject
), на объект будет вызываться bar
. Это то же самое, что делать
myObject.foo();
myObject.bar();
Но требует меньше ввода.
Вот более полный пример:
function AnimalSounds() {}
AnimalSounds.prototype.cow = function() {
alert("moo");
return this;
}
AnimalSounds.prototype.pig = function() {
alert("oink");
return this;
}
AnimalSounds.prototype.dog = function() {
alert("woof");
return this;
}
var sounds = new AnimalSounds();
sounds.cow();
sounds.pig();
sounds.dog();
sounds.cow().pig().dog();
http://jsfiddle.net/jUfdr/
Ответ 2
Это означает, что метод вернет объект, к которому он принадлежит. Это может быть полезно, если вы хотите упорядочить команды следующим образом:
MyObject.method1().method2().method3();
Пример реального мира: jQuery
$(this).addClass('myClass').hide();
Ответ 3
tl; dr Возвращение this
из метода - общий способ разрешить "объединение" методов вместе.
this
относится к текущему контексту и изменяет значение в зависимости от того, как вы вызываете функцию.
С вызовом функции this
относится к глобальному объекту, даже если функция вызывается из метода, а функция принадлежит к тому же классу, что и метод, вызывающий его. Дуглас Крокфорд описал это как "ошибку в дизайне языка" [Crockford 28]
При вызове метода this
относится к объекту, на котором метод вызывается.
При использовании вызова this
ссылается на то, что вы установили при вызове.
С вызовом конструктора this
относится к объекту, который созданный для вас за кулисами, который возвращается, когда (если вы не ошибочно возвращаете свой собственный объект из конструктора).
В приведенном выше примере вы создаете новый метод под названием method
, который позволяет динамически добавлять функции и возвращает this
, тем самым обеспечивая цепочку.
Итак, вы можете сделать что-то вроде:
Car.method("vroom", function(){ alert("vroom"); })
.method("errrk", function() { alert("errrk"); });
и т.д.
Ответ 4
Он возвращает это, обычно это означает элемент html, который его вызвал, но "this" может иметь различные значения
http://www.quirksmode.org/js/this.html