Skip to content
← Back to rules

eslint/new-cap 风格

An auto-fix is available for this rule.

它的作用

此规则要求构造函数名称必须以大写字母开头。

为什么这是个问题?

在 JavaScript 中,new 操作符用于创建特定类型对象的新实例。 该类型的对象由一个构造函数表示。 由于构造函数只是普通的函数,其唯一决定性特征就是调用时使用了 new。 原生 JavaScript 函数通常以大写字母开头,以便将那些用作构造函数的函数与非构造函数区分开来。 许多编码规范建议遵循这一模式,以更轻松地判断哪些函数应作为构造函数使用。

警告newIsCapExceptionPatterncapIsNewExceptionPattern 选项使用 rust 正则语法 实现。许多 JavaScript 特性不被支持(如前瞻断言、后瞻断言等)。

示例

此规则下 错误 的代码示例:

js
function foo(arg) {
  return Boolean(arg);
}

使用默认配置 { "newIsCap": true } 时的 错误 代码示例:

js
/* new-cap: ["error", { "newIsCap": true }] */

var friend = new person();

使用默认配置 { "newIsCap": true } 时的 正确 代码示例:

js
/* new-cap: ["error", { "newIsCap": true }] */

var friend = new Person();

使用配置 { "newIsCap": false } 时的 正确 代码示例:

js
/* new-cap: ["error", { "newIsCap": false }] */

var friend = new person();

使用默认配置 { "capIsNew": true } 时的 错误 代码示例:

js
/* new-cap: ["error", { "capIsNew": true }] */

var colleague = Person();

使用默认配置 { "capIsNew": true } 时的 正确 代码示例:

js
/* new-cap: ["error", { "capIsNew": true }] */

var colleague = new Person();

使用配置 { "capIsNew": false } 时的 正确 代码示例:

js
/* new-cap: ["error", { "capIsNew": false }] */

var colleague = Person();

使用配置 { "newIsCapExceptions": ["events"] } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "newIsCapExceptions": ["events"] }] */

var events = require("events");

var emitter = new events();

使用配置 { "newIsCapExceptionPattern": "^person\\.." } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "newIsCapExceptionPattern": "^person\\.." }] */

var friend = new person.acquaintance();

var bestFriend = new person.friend();

使用配置 { "newIsCapExceptionPattern": "\\.bar$" } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "newIsCapExceptionPattern": "\\.bar$" }] */

var friend = new person.bar();

使用配置 { "capIsNewExceptions": ["Person"] } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "capIsNewExceptions": ["Person"] }] */

function foo(arg) {
  return Person(arg);
}

使用配置 { "capIsNewExceptionPattern": "^person\\.." } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "capIsNewExceptionPattern": "^person\\.." }] */

var friend = person.Acquaintance();
var bestFriend = person.Friend();

使用配置 { "capIsNewExceptionPattern": "\\.Bar$" } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "capIsNewExceptionPattern": "\\.Bar$" }] */

foo.Bar();

使用配置 { "capIsNewExceptionPattern": "^Foo" } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "capIsNewExceptionPattern": "^Foo" }] */

var x = Foo(42);

var y = Foobar(42);

var z = Foo.Bar(42);

使用默认配置 { "properties": true } 时的 错误 代码示例:

js
/* new-cap: ["error", { "properties": true }] */

var friend = new person.acquaintance();

使用默认配置 { "properties": true } 时的 正确 代码示例:

js
/* new-cap: ["error", { "properties": true }] */

var friend = new person.Acquaintance();

使用配置 { "properties": false } 时的 正确 代码示例:

js
/* new-cap: ["error", { "properties": false }] */

var friend = new person.acquaintance();

使用默认配置 { "newIsCap": true } 时的 错误 代码示例:

js
/* new-cap: ["error", { "newIsCap": true }] */

var friend = new person();

使用默认配置 { "newIsCap": true } 时的 正确 代码示例:

js
/* new-cap: ["error", { "newIsCap": true }] */

var friend = new Person();

使用配置 { "newIsCap": false } 时的 正确 代码示例:

js
/* new-cap: ["error", { "newIsCap": false }] */

var friend = new person();

使用默认配置 { "capIsNew": true } 时的 错误 代码示例:

js
/* new-cap: ["error", { "capIsNew": true }] */

var colleague = Person();

使用默认配置 { "capIsNew": true } 时的 正确 代码示例:

js
/* new-cap: ["error", { "capIsNew": true }] */

var colleague = new Person();

使用配置 { "capIsNew": false } 时的 正确 代码示例:

js
/* new-cap: ["error", { "capIsNew": false }] */

var colleague = Person();

使用配置 { "newIsCapExceptions": ["events"] } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "newIsCapExceptions": ["events"] }] */

var events = require("events");

var emitter = new events();

使用配置 { "newIsCapExceptionPattern": "^person\\.." } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "newIsCapExceptionPattern": "^person\\.." }] */

var friend = new person.acquaintance();

var bestFriend = new person.friend();

使用配置 { "newIsCapExceptionPattern": "\\.bar$" } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "newIsCapExceptionPattern": "\\.bar$" }] */

var friend = new person.bar();

使用配置 { "capIsNewExceptions": ["Person"] } 时的额外 正确 代码示例:

::: correct

js
/* new-cap: ["error", { "capIsNewExceptions": ["Person"] }] */

function foo(arg) {
  return Person(arg);
}

使用配置 { "capIsNewExceptionPattern": "^person\\.." } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "capIsNewExceptionPattern": "^person\\.." }] */

var friend = person.Acquaintance();
var bestFriend = person.Friend();

使用配置 { "capIsNewExceptionPattern": "\\.Bar$" } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "capIsNewExceptionPattern": "\\.Bar$" }] */

foo.Bar();

使用配置 { "capIsNewExceptionPattern": "^Foo" } 时的额外 正确 代码示例:

js
/* new-cap: ["error", { "capIsNewExceptionPattern": "^Foo" }] */

var x = Foo(42);

var y = Foobar(42);

var z = Foo.Bar(42);

使用默认配置 { "properties": true } 时的 错误 代码示例:

js
/* new-cap: ["error", { "properties": true }] */

var friend = new person.acquaintance();

使用默认配置 { "properties": true } 时的 正确 代码示例:

js
/* new-cap: ["error", { "properties": true }] */

var friend = new person.Acquaintance();

使用配置 { "properties": false } 时的 正确 代码示例:

js
/* new-cap: ["error", { "properties": false }] */

var friend = new person.acquaintance();

配置

此规则接受一个配置对象,包含以下属性:

capIsNew

type: boolean

default: true

设置为 true 时,要求所有以大写字母开头的函数必须使用 new 调用。

capIsNewExceptionPattern

type: string

用于匹配以大写字母开头的函数名称例外情况的正则表达式模式。

capIsNewExceptions

type: string[]

default: []

忽略以大写字母开头的函数名称的例外列表。

newIsCap

type: boolean

default: true

设置为 true 时,要求所有构造函数名称必须以大写字母开头,例如 new Person()

newIsCapExceptionPattern

type: string

用于匹配构造函数名称以大写字母开头的例外情况的正则表达式模式。

newIsCapExceptions

type: string[]

default: ["Array", "Boolean", "Date", "Error", "Function", "Number", "Object", "RegExp", "String", "Symbol", "BigInt"]

忽略以大写字母开头的构造函数名称的例外列表。

properties

type: boolean

default: true

设置为 true 时,要求对象属性也需首字母大写(例如:new obj.Method())。

如何使用

要通过配置文件或 CLI 启用此规则,可以使用:

json
{
  "rules": {
    "new-cap": "error"
  }
}
bash
oxlint --deny new-cap

参考资料