我們發現apply()和call()的真正用武之地是能夠擴充函數賴以運行的作用域,如果我們想用傳統的方法實現。
1、每個函數都包含兩個非繼承而來的方法:apply()和call()。
2、他們的用途相同,都是在特定的作用域中調用函數。
3、接收參數方面不同,apply()接收兩個參數,一個是函數運行的作用域(this),另一個是參數數組。
call()方法第一個參數與apply()方法相同,但傳遞給函數的參數必須列舉出來。
var obj1 = {name:"by"}; var obj2 = {name:"zy"}; function say(){ alert(this.name); } say.call(obj2);//by say.apply(obj2);//zy //傳遞參數 function say2(num1,num2){ alert(this.name+","+(num1+num2)); } say2.call(obj2,10,20);//by,30 say2.apply(obj2,[10,20]);//zy,30