【问题标题】:What difference between This and That [duplicate]这个和那个有什么区别[重复]
【发布时间】:2014-05-28 23:53:54
【问题描述】:

我想知道和理解 this 和 that 之间的区别,以及何时必须使用它。 我准备了很多帖子和很多教程,但我还不明白

这是我的课

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 ??

【问题讨论】:

标签: javascript


【解决方案1】:

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

that 没有特殊含义。它只是一个被赋值的变量。

在这种特殊情况下,that 被分配了 thisContainer 运行时所具有的值,并在 service 函数中使用(但仍然具有作为调用上下文的值到Container。由于service是一个不同的函数,它的this的值可能不同。


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

【讨论】:

  • 但为什么我必须做 var that = this; ? javascript.crockford.com/private.html
  • @monkeyUser:你不必必须。如果你不想要 - 你可以不定义 that 变量。
  • @monkeyUser — 否则 that 根本没有值。
  • 你有明确的例子吗?
猜你喜欢
  • 2016-05-01
  • 2020-12-29
  • 2021-10-17
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多