Подтвердить что ты не робот

Что делает "вернуть это" в функцию javascript?

Интересно, что делает "вернуть это" в функцию javascript, какова его цель? предположим, что мы имеем следующий код:

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

Что делает "return this" внутри функции?

Я знаю, что делает код выше, и каково использование ключевого слова "this". Я просто не знаю, что делает "return this" внутри функции.

4b9b3361

Ответ 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