2014-04-14 40 views
0

我想知道并理解这个和那个之间的不同,以及何时需要使用它。 我准备好了吗许多后,很多教程,但我不明白,但这和那个有什么区别

这是我的课

function Container(param) { 

    function dec() { 
     if (secret > 0) { 
      secret -= 1; 
      return true; 
     } else { 
      return false; 
     } 
    } 

    this.member = param; 
    var secret = 3; 
    var that = this; 

    this.service = function() { 
     console.log(this.member); // foo 
     console.log(that.member); // foo 
     return dec() ? that.member : null; 
    }; 
} 

var myContainer = new Container('foo'); 
myContainer.service() 

调用myContainer.service()将返回“ABC”的第一个三次它叫做。 之后,它将返回null

为什么我必须要做var that = this ??

+1

另请参阅http://stackoverflow.com/questions/3127429/javascript-this-keyword – elclanrs

+0

您是否尝试过不使用''来查看会发生什么?可能是了解发生了什么的好方法。 – CoderDennis

+0

在你的例子中,我没有看到“that”的需要。试试'var s = myContainer.service; s()'看看有没有'that'发生了什么。 – phylax

回答

4

this是一个获取当前函数的上下文(取决于它如何被调用)的变量。

that没有特别的意义。它只是一个赋值的变量。

在此特定情况下,that被分配thisContainer正在运行具有的值,并使用该service函数内(但仍具有是调用Container的上下文值。由于service是一个不同的功能,它的this值可以是不同的。


通常,对于功能这个特殊的设计,Container将被称为构造函数(这样this将是Container的实例对象),然后将在该实例对象的上下文中调用service,因此您可以使用this而不是通过that传递值。我不知道为什么该代码的作者在这里选择使用that

+0

但为什么我必须做var that = this; ? http://javascript.crockford.com/private.html – monkeyUser

+0

@monkeyUser:你不*必须*。如果你不想要 - 你可能不会定义'那个'变量。 – zerkms

+0

@monkeyUser - 否则'that'根本就没有值。 – Quentin