gpt4 book ai didi

javascript - new ObjectId() 和 new ObjectId and ObjectId() 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 10:41:00 26 4
gpt4 key购买 nike

假设我在文件开头有这个定义:

const ObjectId = mongoose.Types.ObjectId;

您更喜欢哪一个,为什么?

// 1 
new ObjectId;

// 2
new ObjectId();

// 3
ObjectId();

官方文档建议使用new ObjectId。对我来说,new ObjectId() 感觉更自然,但它们中的每一个都会生成一个新的 ObjectId,我在 SO 的问题和答案中看到了它们中的每一个的示例。

http://mongoosejs.com/docs/api.html#types-objectid-js

更新:让我澄清一下:我知道为什么以及如何在 JavaScript 中使用 new 运算符,我只是想知道当 new 用于 ObjectID 生成时是否有任何显着差异。 (函数行为不同,抛出错误等...)

最佳答案

这些实例之间的差异绝对为零。让我逐一介绍并解释其工作原理:

  • new ObjectId - 这完全没问题,并且与 new ObjectId(); 做同样的事情,因为如果构造函数不带括号,您可以不带括号地实例化任何参数,请参阅 the MDN documentationnew 运算符上

  • new ObjectId() - 这是实例化对象的“标准”方式,等效于 new ObjectId

  • ObjectId() - 这与上述两个完全相同。这是因为 source code 中的行:

    if(!(this instanceof ObjectID)) return new ObjectID(id);

    上面的代码做了以下事情:

    一个。 !(this instanceof ObjectID) - 检查 this 是否是 ObjectID 的实例。如果使用 new 调用构造函数,则这是唯一的,其中 this 将引用当前实例,否则 this 将是 windowundefined 取决于您是否处于严格模式。

    return new ObjectID(id) - 如果构造函数没有new调用,那么函数将返回new ObjectID(id) 。这意味着如果您在示例中调用 ObjectId(),该函数将检测到这一点并返回 new ObjectID(id)(或者如果 id 是没有给出,new ObjectID()) 所以和上面两个选项完全一样。

总而言之,没有功能上的区别,只是取决于你喜欢怎么写。没有理由在功能上偏爱其中之一。


注意:ObjectIDObjectId 是一回事。源代码指出:var ObjectId = ObjectID;

关于javascript - new ObjectId() 和 new ObjectId and ObjectId() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44265981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com