规则名 | 规则类型 |
---|---|
consistent-this |
suggestion |
It is often necessary to capture the current execution context in order to make it available subsequently. A prominent example of this are jQuery callbacks:
var that = this;
jQuery('li').click(function (event) {
// here, "this" is the HTMLElement where the click event occurred
that.setFoo(42);
});
There are many commonly used aliases for this
such as that
, self
or me
. It is desirable to ensure that whichever alias the team agrees upon is used consistently throughout the application.
This rule enforces two things about variables with the designated alias names for this
:
- If a variable with a designated name is declared, it must be either initialized (in the declaration) or assigned (in the same scope as the declaration) the value
this
. - If a variable is initialized or assigned the value
this
, the name of the variable must be a designated alias.
This rule has one or more string options:
- designated alias names for
this
(default"that"
)
选项 "that"
默认值的 错误 代码示例:
/*eslint consistent-this: ["error", "that"]*/
var that = 42;
var self = this;
that = 42;
self = this;
选项 "that"
默认值的 正确 代码示例:
::: correct
/*eslint consistent-this: ["error", "that"]*/
var that = this;
var self = 42;
var self;
that = this;
foo.bar = this;
Examples of incorrect code for this rule with the default "that"
option, if the variable is not initialized:
/*eslint consistent-this: ["error", "that"]*/
var that;
function f() {
that = this;
}
Examples of correct code for this rule with the default "that"
option, if the variable is not initialized:
::: correct
/*eslint consistent-this: ["error", "that"]*/
var that;
that = this;
var foo, that;
foo = 42;
that = this;
If you need to capture nested context, consistent-this
is going to be problematic. Code of that nature is usually difficult to read and maintain and you should consider refactoring it.