假设我在文件的开头有这个定义:
const ObjectId = mongoose.Types.ObjectId;你应该选择哪一种?为什么?
// 1
new ObjectId;
// 2
new ObjectId();
// 3
ObjectId();官方文件建议使用new ObjectId。对我来说,new ObjectId()感觉更自然一些,但是每个ObjectId都生成了一个新的ObjectId,我在这些问题和答案中都看到了它们的例子。
http://mongoosejs.com/docs/api.html#types-objectid-js
更新:--让我澄清这一点:我知道为什么以及如何在JavaScript中使用一个新的操作符,我只想知道在使用new生成ObjectID时是否存在显著的差异。(函数的行为不同,抛出一个错误,等等)
发布于 2017-05-30 18:40:17
这些实例化之间绝对没有差别。让我逐一解释一下它是如何工作的:
new ObjectId --这是完全正确的,并且执行与new ObjectId();相同的操作,因为如果构造函数不带任何参数,则可以实例化,请参见new运算符上的MDN文档。new ObjectId() --这是实例化对象的“标准”方法,相当于new ObjectId。ObjectId() -这是和上面两个完全相同的。这是因为源代码中的行:
如果(!(ObjectID的这个实例))返回新的ObjectID(id);
上述代码执行以下操作:
a. !(this instanceof ObjectID) --检查this是否是ObjectID的实例。只有当构造函数与一起调用时,this才是真正的this,否则this将是window或undefined,这取决于您是否处于严格模式。
b. return new ObjectID(id) --如果没有用new调用构造函数,则函数将返回new ObjectID(id)。这意味着如果在示例中调用ObjectId(),该函数将检测到这一点并返回new ObjectID(id) (或者如果没有给出id,则返回new ObjectID()),因此它与上述两个选项完全相同。总之,没有功能上的区别,只是取决于你喜欢写它。在功能上,没有理由选择一个而不是另一个。
注意:ObjectID和ObjectId是同一回事。源代码声明:var ObjectId = ObjectID;。
https://stackoverflow.com/questions/44265981
复制相似问题