2015-12-10 393 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.將進入一些關於它的細節。