这个关键词在课堂内的含义

时间:2017-01-25 19:43:54

标签: javascript ecmascript-6

我试图了解this关键字在JS中的工作原理,尤其是this关键字在类中使用时的确切表示,但不在任何嵌套函数中。当我将第一段代码修改为第二段代码时,请帮助我理解为什么会出现错误。

console.log(this);
  constructor () {
    console.log(this);
  }
}
var tiger = new Animal();

这将在控制台中输出:Window {} and Animal {}

console.log(this);
class Animal {
    var that = this; // addition
  constructor () {
    console.log(this);
  }
}
var tiger = new Animal();
console.log(tiger.that) // addition

这将在控制台中输出Uncaught SyntaxError: Unexpected identifier。我相信这个错误的原因是var that = this;行,但我不明白为什么,我假设,变量that将等于Window {} or Animal {}

3 个答案:

答案 0 :(得分:0)

您尝试的是无效的语法。请查看the MDN docs以供参考。

答案 1 :(得分:-1)

您需要将var that = this;移至constructor()。您不能在方法之外声明class个特定属性。

console.log(this);
class Animal {
  constructor () {
    var that = this; // addition
    console.log(this);
  }
}
var tiger = new Animal();
console.log(tiger.that) // addition

答案 2 :(得分:-2)

在第二个示例中,thatclass Animal范围内的局部变量。使用var关键字声明变量时,它仅在当前范围内声明。它在该类之外的任何代码中都是未定义的。

有关详细信息,请查看Variable Scope in Javascript上的MSDN文章。