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

Simulating an apply() for constructors (JavaScript)

我是 JavaScript 的新手,目前正在阅读 Rausch 的书 "Speaking JavaScript",我在 "Simulating apply() for constructors" 部分看到了以下符号:

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

现在这让我感到很困惑。有人可以详细解释这个声明吗?特别是,我无法理解 'new' 关键字后面的括号的含义,另外,就我而言, 'bind' 是一种只能应用于函数的方法,不是吗?提前致谢。

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

returns 一个使用这三个数字参数调用全局 Date 函数的函数(2011 年平安夜)。 new 运算符可以应用于任何函数,因此在本例中它被应用于那个函数。考虑这个重写:

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

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

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

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

类似于:

new Date(2011, 11, 24)

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