Function.prototype.call()
should not be used when this
context remains the same
- USELESS_CALL
- Code Quality
- Low
- No tags
This rule applies when this
context remains the same after applying Function.prototype.call()
.
When an object method is called, its this
context is normally set to the object on which it is called.
This behavior can be changed by invoking the method through Function.prototype.call()
.
However, when Function.prototype.call()
does not change this
context, it becomes useless. For example, obj.foo.call(obj, 42)
is equivalent to obj.foo(42)
.
This could happen as a result of refactoring or could be an actual bug. So, it is recommended to check the code and remove Function.prototype.call()
if it is not needed.
This rule also applies to Function.prototype.apply()
when the number of argument is 1.
Noncompliant Code Example
View with compliant examples side by sideclass Test {
data = 'data';
foo() {
console.log(this.data);
}
bar() {
this.foo.call(this); // USELESS_CALL alarm
}
}
Compliant Code Example
View with noncompliant examples side by sideclass Test {
data = 'data';
foo() {
console.log(this.data);
}
bar() {
this.foo();
}
}
Version
This rule was introduced in DeepScan 1.26.0.