什么“返回此”在javascript函数中做什么?

时间:2011-11-28 18:59:12

标签: javascript

我想知道,在javascript函数中“返回这个”是做什么的,它的目的是什么? 假设我们有以下代码:

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

在函数内部“返回此”做什么?

我知道上面的代码是什么,以及“this”关键字的用途是什么。我只是不知道函数内部的“返回这个”是什么。

4 个答案:

答案 0 :(得分:53)

它指的是当前正在调用该方法的对象实例。它用于链接。例如,你可以这样做:

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/

答案 1 :(得分:12)

这意味着该方法将返回它所属的对象。如果您想链接如下链接,这可能很有用:

MyObject.method1().method2().method3();

真实世界的例子:jQuery

$(this).addClass('myClass').hide();

答案 2 :(得分:11)

tl; dr 从方法返回this是允许将方法“链接”在一起的常用方法。


this引用当前上下文,并根据您调用函数的方式更改含义。

  

使用函数调用,this引用全局对象,即使从方法调用该函数,该函数也与调用它的方法属于同一个类。 Douglas Crockford将此描述为“语言设计中的错误”[Crockford 28]

     

使用方法调用,this引用其上的对象   正在调用方法。

     

通过应用调用,this指的是在调用apply时设置的内容。

     

使用构造函数调用时,this引用的对象是   在幕后为你创建,当它返回时   构造函数退出(假设您没有错误地从构造函数中返回自己的对象)。

在上面的示例中,您将创建一个名为method的新方法,该方法允许您动态添加函数,并返回this,从而允许链接。

所以你可以这样做:

Car.method("vroom", function(){ alert("vroom"); })
   .method("errrk", function() { alert("errrk"); });

等等。

答案 3 :(得分:2)

它返回这个,通常意味着调用它的html元素,但“this”可以有不同的含义 http://www.quirksmode.org/js/this.html