我正在研究 JavaScript 中的对象,并且在使用对象创建表达式时需要 new
关键字和 ()
时感到困惑。
var a = new Date(); // current date and time
var b = Date(); // current date and time
var c = new Date; // current date and time
var d = Date; // => function Date() { [native code] }
前三种方法有区别吗?为什么 d
没有按预期执行?
最佳答案
给定:new Date()
这是从 constructor-function 创建新对象的“标准”方式1;它返回一个表示当前时间的新 Date 对象。
给定:Date()
JavaScript defines the Date function to operate like this当不作为构造函数调用时(即使用 new
)。它返回一个与 new Date()
不同的 值 - 一个字符串,不是 一个 Date 对象。参见 Why we can't call methods of Date() class without new operator .
用户代码还可以在构造函数中检查 this
的值以确定是否使用了 new
,尽管这种情况很少发生。参见 How to detect if a function is called as constructor?
给定:新日期
当使用 new
时,如果没有参数,括号是可选的。这只是大多数人不使用的附加语法形式 - 如果表达式终止,它等同于 new Date()
。参见 Can we omit parentheses when creating an object using the "new" operator?
给定:日期
这会将表达式计算为构造函数(它只是一个函数对象!2)无需调用它或创建新实例。这就是结果显示“函数”的原因 - 它是构造函数。
1 我使用构造函数这个术语来强调构造函数只是一个[还]支持new
的函数;从技术上讲,将其称为构造函数就足够了。
2 同样,了解 JavaScript 中的函数 [-对象] 是一等公民,因此只为它们自己赋值是很重要的;像任何对象。在最后一个示例中,对象/值的赋值发生时没有对对象本身执行任何操作(即 function invocation )。
关于javascript - 在 JavaScript 中创建新对象时什么时候需要括号和 new 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25634879/