在JavaScript中创建新对象时,何时需要括号和新关键字?
我正在研究JavaScript中的对象,当使用对象创建表达式时需要在JavaScript中创建新对象时,何时需要括号和新关键字?,javascript,date,object,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() { [
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
没有按预期执行?给定:新日期()
这是从1创建新对象的“标准”方法;它返回一个表示当前时间的新日期对象
给定:Date()
不作为构造函数调用时的JavaScript(即使用new
)。它返回的值(字符串而不是日期对象)与newdate()
不同。看
用户代码还可以在构造函数中检查this
的值,以确定是否使用了new
,尽管这只是相对较少的情况。看
给定:
新日期
使用new
时,如果没有参数,则括号是可选的。这只是大多数人不使用的一种附加语法形式——如果表达式终止,它相当于newdate()
。看
给定:日期
这会将表达式计算为构造函数(它只是一个函数对象!2),而不调用它或创建新实例。这就是结果显示“函数”的原因——它是构造函数
1我使用构造器函数这个术语来强调一点,即构造器只是一个[还]支持
new
的函数;从技术上讲,将其称为构造函数就足够了
2同样,理解JavaScript中的函数[-objects]是一流的公民,因此只重视自身,这一点很重要;像任何物体一样。在上一个示例中,对象/值的赋值没有对对象本身执行任何操作。
Date
是一个构造函数:
function Date() {}
使用new
时,将创建Date
的实例:
var date = new Date;
date instanceof Date === true
如果不传递任何参数,则括号是可选的
现在,Date
本身就是对该构造函数的引用。因此,下面的一行:
var date = Date
只需将该函数赋给名为date
的变量即可。而另一行:
var date = Date()
正在调用构造函数。但是,如果没有new
,并不一定意味着它将返回Date
的实例。这种行为由职能部门决定;JavaScript中的许多构造函数可以在不使用new
的情况下调用。函数可能会这样处理它:
function Date() {
if (!(this instanceof Date)) {
return new Date()
}
...
}
Date
是对函数的引用。简单地引用它不会执行它。这就是为什么d
会这样做
newdate
和newdate()
都返回Date
对象的新实例。一个人就是不能选择传递参数
我认为Date()
也会这样做,但这不是构造函数的标准行为。函数有时会返回对象的新实例
函数Fun(){
返回新技巧();
}
新日期==新日期()
但日期!=日期()
。相关,但不完全重复: