使用或不使用'new'关键字创建Mongoose模式?

11

我在网上看到的大部分示例都做了类似于...

var UserSchema = new mongoose.Schema({
    name: String,
    age: String
});

然而,最近我发现一本书可以完成上述操作...但没有使用new关键字。

var UserSchema = mongoose.Schema({
    name: String,
    age: String
});

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


可能是[Mongoose Schema "new"关键字]的重复问题(https://stackoverflow.com/q/22596806/1048572)。 - Bergi
2个回答

15

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

综上所述,如果您调用

var schema = new mongoose.Schema({})

如果您调用函数,则会自动初始化一个实例,而如果您自己初始化实例,则需要手动执行此操作。

var schema = mongoose.Schema({})

mongoose 会为你初始化一个模型,包括以下内容:

mongoose initializes one for you, with this:

function Schema(obj, options) {
  if (!(this instanceof Schema)) {
    return new Schema(obj, options);
  }
  ...

@Grateful 你确定你理解了所有的内容吗?我想确保你理解我的意思。你之前有使用过其他面向对象的语言,比如PHP吗?我问这个问题是因为mongoose.Schema是一个Class,你必须通过使用new Class()来初始化实例才能使用它。 - Svenskunganka
我理解了你的回答。谢谢。 - Grateful
1
我很高兴,快乐编程! - Svenskunganka

0

是的,我同意上面的答案。但是在这里,我想补充一些更重要的要点。看着Mongoose文档,我觉得它应该总是使用new关键字调用,因为Schema是一个构造函数。

两者都可以工作并且有效,但我的建议是只使用new mongoose.Schema(),因为这是正确的方式。遵循标准约定将使您的代码更易于阅读;不仅对他人而言,对于您自己在6个月后回顾代码时也是如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接