consistent-this
强制在捕获当前执行上下文时使用一致的命名
❄️ 已冻结
此规则目前处于冻结状态,不接受功能请求。
通常有必要捕获当前的执行上下文,以便后续使用。一个突出的例子是 jQuery 回调
const that = this;
jQuery('li').click(function (event) {
// here, "this" is the HTMLElement where the click event occurred
that.setFoo(42);
});
对于 this,有很多常用的别名,例如 that、self 或 me。 确保团队达成一致的任何别名在整个应用程序中一致使用是可取的。
规则详情
此规则强制执行关于具有 this 的指定别名名称的变量的两件事
- 如果声明了具有指定名称的变量,则它必须被初始化(在声明中)或赋值(在与声明相同的范围内)为值
this。 - 如果变量被初始化或赋值为值
this,则变量的名称必须是指定的别名。
选项
此规则有一个或多个字符串选项
this的指定别名名称 (默认为"that")
此规则的不正确代码示例,使用默认的 "that" 选项
在 Playground 中打开
/*eslint consistent-this: ["error", "that"]*/
let ;
let ;
;
;
此规则的正确代码示例,使用默认的 "that" 选项
在 Playground 中打开
/*eslint consistent-this: ["error", "that"]*/
let that = this;
const self = 42;
let foo;
that = this;
foo.bar = this;
此规则的不正确代码示例,使用默认的 "that" 选项,如果变量未初始化
在 Playground 中打开
/*eslint consistent-this: ["error", "that"]*/
let ;
function f() {
that = this;
}
此规则的正确代码示例,使用默认的 "that" 选项,如果变量未初始化
声明一个变量 that 并将 this 赋值给它。
在 Playground 中打开
/*eslint consistent-this: ["error", "that"]*/
let that;
that = this;
声明两个变量,foo 和 that,其中 foo 已初始化,然后将 this 赋值给 that。
在 Playground 中打开
/*eslint consistent-this: ["error", "that"]*/
let foo = 42, that;
that = this;
何时不使用
如果您需要捕获嵌套上下文,consistent-this 将会变得有问题。 这种性质的代码通常难以阅读和维护,您应该考虑重构它。
版本
此规则在 ESLint v0.0.9 中引入。