2013-12-12 17 views
1

正如你所知道的,每一個函數都是java腳本本身就有一個名爲'arguments'的變量,它包含傳遞給該函數的所有參數。如何在JavaScript中爲Google閉包編譯器設置參數類型?

考慮下面的代碼示例:

String.prototype.format = function(pattern){ 

var args = arguments.slice(1); 

// other implementations are removed... 

} 

在這種情況下,谷歌關閉編譯器告訴我,參數沒有任何方法片。

由於事實上,它有一個方法名切片,但谷歌關閉編譯器不能確定的參數數組的類型。

但在運行時的代碼工作正常

我如何定義的參數爲谷歌關閉編譯器的類型?

什麼是最好的做法?

我測試過多種方法,但其中非爲我工作。

沒有這一點,我們的項目將無法正常編譯,所以我們需要這個,感謝

感謝

+0

「但在運行時的代碼工作正常,」不可能是正確的。參數沒有「切片」方法。是什麼讓你認爲它有效? 在控制檯嘗試: 函數foobar的(){變參= arguments.slice(1)}; foob​​ar的(); 結果: 類型錯誤:對象#沒有方法「切片」 – John

回答

3

arguments不是一個數組(它是一個類似數組的對象),所以它不包含任何方法slice。你可以試試:var args = [].slice.call(arguments,1);換句話說,調用Array.slice - 方法爲arguments -object營造真實Array出來。要在瀏覽器控制檯測試運行這段代碼:

function foo(){ 
    console.log([].slice.call(arguments,1)); 
} 
foo(1,2,3); //=> logs [2,3] 

See also

+0

另一(更詳細的但清潔器)的方法是:'Array.prototype.slice.call(參數1)' –

相關問題