模拟构造函数的apply()(JavaScript)

时间:2015-12-10 14:42:54

标签: javascript constructor bind apply

我是JavaScript新手,目前我正在阅读Rausch的书“Speaking JavaScript”,我在“Simulating apply()for constructors”部分中注意到了以下表示法:

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

现在这对我来说似乎很混乱。有人可以详细解释这个陈述吗?特别是,我无法得到'new'关键字之后的括号的含义,另外,就我而言,'bind'是一种只能应用于函数的方法,不是吗?提前谢谢。

3 个答案:

答案 0 :(得分:0)

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

返回一个函数,该函数使用这三个数字参数调用全局Date函数(Christmas eve 2011)。 new运算符可以应用于任何函数,因此在这种情况下,它应用于该函数。考虑一下这个重写:

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

由于new的运算符优先级,括号是必需的。如果没有括号,解析器会将其解释为new函数Date.bind的调用。 使用括号,bind调用首先发生 ,然后调用返回的函数{/ 1}}。

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

答案 1 :(得分:0)

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

它类似于:

new Date(2011, 11, 24)

答案 2 :(得分:0)

在第3点检查site。它将详细介绍它。