2016-09-29 69 views
4

我知道一個人必須非常小心的功能Arguments object採用擴展運營商,功能參數對象

但沒有任何已知的缺點(優化/性能問題)利用傳播與運營參數對象?或者這完全沒問題?

我要創建的傳遞給函數的參數未知量的數組:

function Numbers(){ 
    this.numbers = [...arguments]; 
} 

A fiddle can be found here

看起來很整齊,並在MDN頁有關參數對象甚至建議我可以使用傳播運算符爲此:

您還可以使用Array.from()方法或s pread運算符將參數轉換爲真實的數組。

但我還是想看看別人是否對此有其他意見。

回答

4

您還可以使用rest parameters

function Numbers(...numbers){ 
    this.numbers = numbers; 
} 
+1

@ T.J.Crowder建議相同。沒想到那個...... – Wilt

2

這完全沒關係,有沒有較老式的ES5

this.numbers = [].slice.call(arguments); 

使用擴展不事吸塵器ES2015

this.numbers = [...arguments]; 

同一只記得它贏得了」缺點t在箭頭功能(沒有arguments,你很好。 Rest參數和Array.from是其他選項,也很好。

1

它的優良使用傳播符號(它不是一個運營商)與arguments。或者至少,它使用arguments就好。在ES2015及以上版本(例如,如果您有傳播符號),使用arguments的呼叫非常有限。

而事實上,有一個在你的例子沒有必要:使用REST參數:

function Numbers(...args){ 
    this.numbers = args; 
} 

在這個例子中,args是一個數組。一個真正的數組。

+1

不錯,不知道我可以這樣做:) – Wilt

0

原因之一的人說不要使用arguments對象是因爲它看起來像一個數組,但它不是:

arguments對象不是一個數組。它類似於一個數組,但除長度外沒有任何數組屬性。例如,它沒有pop方法。然而,它可以轉化爲一個真正的數組:

你是好去這裏,因爲像Array.from()傳播經營者,使新副本

+1

這是*一個*原因。鬆散模式也會影響性能,箭頭函數沒有自己的'arguments'對象。 –