2015-12-10 395 views
0

我是JavaScript新手,目前我正在阅读Rausch的“Speaking JavaScript”一书,其中我在“Simulating apply()for constructors”一节中遇到以下表示法:模拟构造函数的应用()对于构造函数(JavaScript)

new (Date.bind(null, 2011, 11, 24)) 

现在这对我来说似乎很困惑。有人能详细解释这个声明吗?特别是,我无法理解'new'关键字后面的括号的含义,再加上,就我而言,'bind'是一种只能用于函数的方法,不是吗? ?提前致谢。

+2

全局'Date'构造函数*是一个函数。 – Pointy

回答

0
Date.bind(null, 2011, 11, 24) 

返回一个函数,用这三个数值参数(圣诞节前夕2011)调用全局函数Datenew运算符可以应用于任何函数,因此在这种情况下,它将应用于该函数。考虑重写:

var ChristmasEve2011 = Date.bind(null, 2011, 11, 24); 
var d = new ChristmasEve2011(); 

由于运算符优先级为new,所以括号是必需的。如果没有括号,解析器会将其解释为通过Date.bind函数的new进行调用。 括号,bind调用发生第一个,然后调用new返回函数。

请注意,由于.bind()创建的函数的性质,使用new运算符没有多大意义。实际调用Date构造函数时,this的值将为null

0

'.bind'返回一个新的函数,其值绑定到传递给函数的第一个参数。 在这种情况下,'this'的值将为'null'。 所以它只是返回Date构造函数而没有任何特别的东西。

它类似于:

new Date(2011, 11, 24) 
0

入住这site点3.将进入一些关于它的细节。