對于這個問題,this.add.apply(this,arguments);和this.add(arguments);相同的點(diǎn)是在add函數(shù)里面的this指向是一樣的,不同的點(diǎn)是傳給add函數(shù)的參數(shù)是不一樣的,假設(shè)我們使用newSet(1,2);那么arguments是[1,2],使用this.add.apply(this,arguments);調(diào)用add函數(shù)時其實(shí)相當(dāng)于this.add(1,2);此時add接收到的參數(shù)個數(shù)是2;而使用this.add(arguments)調(diào)用add函數(shù)時,相當(dāng)于this.add([1,2]);此時add收到的參數(shù)個數(shù)是1,參數(shù)是數(shù)組[1,2]。Update1:我覺得和不定參數(shù)還是有點(diǎn)兒關(guān)系的,比如說add函數(shù)的作用就是把傳給它的每個參數(shù)相加,我們想在Set函數(shù)里面計算傳給它的參數(shù)的總和,假設(shè)Set函數(shù)接收的參數(shù)也不固定,使用this.add.apply(this,arguments);是可以的,如果用this.add方法直接調(diào)用,因?yàn)镾et接收的參數(shù)數(shù)目不固定,所以我們可能就得按照下面這么寫:varlen=arguments.length;this.add(arguments[0],arguments[1],arguments[2],...,arguments[len]);但是因?yàn)閘en是一個不確定的數(shù),我們沒法確定...的內(nèi)容,所以沒有辦法通過this.add()這種直接調(diào)用的方式實(shí)現(xiàn)不定參數(shù)的調(diào)用。Update2:varlen=arguments.length;this.add(arguments[0],arguments[1],arguments[2],...,arguments[len]);在ES6之前是沒有辦法通過this.add()這種方法直接調(diào)用的,在ES6中可以通過解耦的方式調(diào)用this.add(...arguments),這個和this.add.apply(this,arguments);的效果是一樣的;不固定指的是參數(shù)的數(shù)量。