javascript - 在 JavaScript 中创建新对象时什么时候需要括号和 new 关键字?

标签 javascript date object

我正在研究 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/

相关文章:

Javascript:带有方法的对象与带有开关的函数

java - 使用 SimpleDateFormat 无法解析的日期

android - 将毫秒字符串转换为日期字符串

javascript - 任何带有填充数据的日期范围 slider 的 JS 库

javascript - 将数据附加到 localStorage 对象

javascript - 为什么 Bootstrap 崩溃会自动折叠(收缩)元素?

javascript - 错误的元素集中在 Chrome 中

javascript - 如何使用 Firebug xpath.js 脚本?

object - 解析一个对象,为每个成员添加一个成员属性

javascript - 确保我的 key 始终位于 javascript 对象中的第一个的最简单方法是什么?