改變 Array.concat() 的特性
前言
最近學習 Symbol 時發現它可以改變Array.concat() 的特性,在此把學習的過程做紀錄。
內容
範例如下
let strAr = [ 'a' , 'b' , 'c' ]; let numAr1 = [ 1 , 2 , 3 ]; let numAr2 = [ 4 , 5 , 6 ]; console.log( strAr.concat(numAr1) );//["a", "b", "c", 1, 2, 3] // numAr1[ Symbol.isConcatSpreadable ] = false; console.log( strAr.concat(numAr1) );//["a", "b", "c", [1, 2, 3]] console.log( strAr.concat(numAr2) );//["a", "b", "c", 4, 5, 6]
範例開頭先示範一次正常的 Array.concat() ,接著透過 Symbol.isConcatSpreadable 這個 Symbol 來存取 Array 的特性,改變後再次 Array.concat() 後發現 Array 不會被展開了!要注意這個改變特性是針對個別的 Array 來修改,所以與 numAr2 執行 Array.concat() 又再次展開了。Symbol 可以用來改變改變 Function 的行為,用起來雖然優美,但這是不是也代表著以後這些 Funciton 不能認定它只有一種行為,個人認為透過提供新的 Method 或讓 Function 可以用參數來調整行為的做法是比較好的。
沒有留言:
張貼留言