Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中创建新对象时,何时需要括号和新关键字?_Javascript_Date_Object - Fatal编程技术网

在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() { [

我正在研究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
没有按预期执行?

给定:
新日期()

这是从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(){
返回新技巧();

}

新日期==新日期()
日期!=日期()
。相关,但不完全重复: