# no-obj-calls

禁止将全局对象属性作为函数调用

配置文件中的 "extends": "eslint:recommended" 属性启用了该规则

ECMAScript 提供了几个旨在按原样使用的全局对象。其中一些对象看起来好像是构造函数,因为它们的大小写(例如 MathJSON),但如果您尝试将它们作为函数执行,则会引发错误。

ECMAScript 5 规范 明确表示不能调用 MathJSON

Math 对象没有 [[Call]] 内部属性;不能将 Math 对象作为函数调用。

ECMAScript 2015 规范 明确表示不能调用 Reflect

Reflect 对象也没有 [[Call]] 内部方法;不能将 Reflect 对象作为函数调用。

并且 ECMAScript 2017 规范 明确表示不能调用 Atomics

Atomics 对象没有 [[Call]] 内部方法;不能将 Atomics 对象作为函数调用。

# 规则详情

此规则不允许将 MathJSONReflectAtomics 对象作为函数调用。

此规则还禁止将这些对象用作带有 new 运算符的构造函数。

此规则的错误代码示例:

/*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();

此规则的正确代码示例:

/*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);
Last Updated: 5/13/2023, 8:55:38 PM