使用或不使用“new”关键字创建猫鼬模式?

Gra*_*ful 6 mongoose mongodb node.js

我在网上看到的大多数例子都是这样的......

var UserSchema = new mongoose.Schema({
    name: String,
    age: String
});
Run Code Online (Sandbox Code Playgroud)

然而,最近我发现一本书做了上述...但没有 new 关键字。

var UserSchema = mongoose.Schema({
    name: String,
    age: String
});
Run Code Online (Sandbox Code Playgroud)

我现在很困惑。我们是否使用 new 关键字来创建模式……在这两种情况下会发生什么?

Sve*_*ven 9

两者都是有效的,并返回Mongoose.Schema该类的新实例。这意味着两者的作用完全相同。这一检查您是否已经拥有 Schema 类的实例,如果没有,它会为您返回一个。

总而言之,如果你打电话

var schema = new mongoose.Schema({})
Run Code Online (Sandbox Code Playgroud)

你自己初始化一个实例,而如果你调用

var schema = mongoose.Schema({})
Run Code Online (Sandbox Code Playgroud)

猫鼬为您初始化一个,如下:

function Schema(obj, options) {
  if (!(this instanceof Schema)) {
    return new Schema(obj, options);
  }
  ...
Run Code Online (Sandbox Code Playgroud)