简中文档

no-this-alias

NOTE: this rule is part of the recommended rule set.
Enable full set in deno.json:
{
  "lint": {
    "rules": {
      "tags": ["recommended"]
    }
  }
}
Enable full set using the Deno CLI:
deno lint --rules-tags=recommended
This rule can be explictly included to or excluded from the rules present in the current tag by adding it to the include or exclude array in deno.json:
{
  "lint": {
    "rules": {
      "include": ["no-this-alias"],
      "exclude": ["no-this-alias"]
    }
  }
}

不允许将变量赋值给 this

在大多数情况下,通过正确使用箭头函数,可以避免将 this 存储在变量中,因为它们根据定义箭头函数的作用域确定 this

让我们看一个具体的例子:

const obj = {
  count: 0,
  doSomethingLater() {
    setTimeout(function () { // 这个函数在全局作用域中执行;`this` 评估为 `globalThis`
      this.count++;
      console.log(this.count);
    }, 300);
  },
};

obj.doSomethingLater();
// 打印 `NaN`,因为属性 `count` 不在全局作用域中。

在上面的例子中,传递给 setTimeout 的函数中的 this 评估为 globalThis,这导致预期的值 1 没有被打印。

如果您想在不使用箭头函数的情况下解决这个问题,可以将 this 的引用存储在另一个变量中:

const obj = {
  count: 0,
  doSomethingLater() {
    const self = this; // 将 `this` 存储在 `self` 中
    setTimeout(function () {
      // 使用 `self` 代替 `this`
      self.count++;
      console.log(self.count);
    }, 300);
  },
};

obj.doSomethingLater();
// 打印 `1`,如预期

但在这种情况下,箭头函数非常有用。使用箭头函数,代码变得更加清晰和易于理解:

const obj = {
  count: 0,
  doSomethingLater() {
    setTimeout(() => { // 使用箭头函数
      // 此处 `this` 评估为 `obj`
      this.count++;
      console.log(this.count);
    }, 300);
  },
};

obj.doSomethingLater();
// 打印 `1`,如预期

这个例子来自 MDN

无效的:

const self = this;

function foo() {
  const self = this;
}

const bar = () => {
  const self = this;
};

有效的:

const self = "this";

const [foo] = this;

你找到了你需要的东西吗?

编辑此页面
隐私政策