no-obj-calls
不允许调用全局对象属性作为函数(no-obj-calls)
"extends": "eslint:recommended"
配置文件中的属性启用此规则。
ECMAScript 提供了几个用于原样使用的全局对象。其中一些对象看起来好像它们可能是构造函数,因为它们的大小写(如Math
和JSON
),但如果尝试将它们作为函数执行,则会引发错误。
在 ECMAScript的5规范 明确规定,双方Math
和JSON
不能调用:
Math 对象没有
[[Call]]
内部属性; 作为函数不可能调用 Math 对象。
ECMAScript 的2015年规范明确指出,Reflect
不得援引:
反射对象也没有
[[Call]]
内部方法; 作为函数调用 Reflect 对象是不可能的。
规则细节
这个规则不允许调用Math
,JSON
和Reflect
对象作为功能。
这个规则的错误
代码示例:
/*eslint no-obj-calls: "error"*/
var math = Math(
var json = JSON(
var reflect = Reflect(
这个规则的正确
代码示例:
/*eslint no-obj-calls: "error"*/
function area(r) {
return Math.PI * r * r;
}
var object = JSON.parse("{}"
var value = Reflect.get{ x: 1, y: 2 }, "x"
进一步阅读
- The Math Object 版本规则是在 ESLint 0.0.9.Resources 中引入的