1 回答

TA貢獻1869條經驗 獲得超4個贊
對于這個問題,this.add.apply(this, arguments);
和this.add(arguments);
相同的點是在add函數里面的this指向
是一樣的,不同的點是傳給add函數的參數
是不一樣的,假設我們使用new Set(1, 2);那么arguments
是[1, 2]
,使用this.add.apply(this, arguments);
調用add函數時其實相當于this.add(1, 2);
此時add接收到的參數個數是2
;而使用this.add(arguments)
調用add函數時,相當于this.add([1, 2]);
此時add收到的參數個數是1
,參數是數組[1, 2]
。
Update1:
我覺得和不定參數還是有點兒關系的,比如說add函數的作用就是把傳給它的每個參數相加,我們想在Set
函數里面計算傳給它的參數的總和,假設Set
函數接收的參數也不固定
,使用this.add.apply(this, arguments);
是可以的,如果用this.add
方法直接調用,因為Set接收的參數數目不固定,所以我們可能就得按照下面這么寫:
var len = arguments.length;
this.add(arguments[0], arguments[1], arguments[2], ..., arguments[len]);
但是因為len
是一個不確定的數,我們沒法確定...
的內容,所以沒有辦法通過this.add()
這種直接調用的方式實現不定參數的調用。
Update2:
var len = arguments.length;
this.add(arguments[0], arguments[1], arguments[2], ..., arguments[len]);
在ES6之前是沒有辦法通過this.add()這種方法直接調用的,在ES6中可以通過解耦的方式調用this.add(...arguments)
,這個和this.add.apply(this, arguments);
的效果是一樣的;
不固定指的是參數的數量。
添加回答
舉報