Skip to content

Latest commit

 

History

History
72 lines (41 loc) · 1.96 KB

no-obj-calls.md

File metadata and controls

72 lines (41 loc) · 1.96 KB
规则名 规则类型 深入了解
no-obj-calls
problem

ECMAScript provides several global objects that are intended to be used as-is. Some of these objects look as if they could be constructors due their capitalization (such as Math and JSON) but will throw an error if you try to execute them as functions.

The ECMAScript 5 specification makes it clear that both Math and JSON cannot be invoked:

The Math object does not have a [[Call]] internal property; it is not possible to invoke the Math object as a function.

The ECMAScript 2015 specification makes it clear that Reflect cannot be invoked:

The Reflect object also does not have a [[Call]] internal method; it is not possible to invoke the Reflect object as a function.

And the ECMAScript 2017 specification makes it clear that Atomics cannot be invoked:

The Atomics object does not have a [[Call]] internal method; it is not possible to invoke the Atomics object as a function.

规则详解

This rule disallows calling the Math, JSON, Reflect and Atomics objects as functions.

This rule also disallows using these objects as constructors with the new operator.

此规则的 错误 代码实例:

/*eslint no-obj-calls: "error"*/
/*eslint-env es2017*/

var math = Math();

var newMath = new Math();

var json = JSON();

var newJSON = new JSON();

var reflect = Reflect();

var newReflect = new Reflect();

var atomics = Atomics();

var newAtomics = new Atomics();

此规则的 正确 代码实例:

::: correct

/*eslint no-obj-calls: "error"*/
/*eslint-env es2017*/

function area(r) {
    return Math.PI * r * r;
}

var object = JSON.parse("{}");

var value = Reflect.get({ x: 1, y: 2 }, "x");

var first = Atomics.load(foo, 0);