最近重新溫習的時候發現對於apply和call方法的區分以及使用時忘得差不多了,所以簡單記錄鞏固一下 基本語法 函數名.apply(Object,[參數1,參數2,...]) 函數名.call(Object,參數1,參數2,...) 共同點:都可以用來改變this的指向 不同點:兩者中第一個參數均為 ...
最近重新溫習的時候發現對於apply和call方法的區分以及使用時忘得差不多了,所以簡單記錄鞏固一下
基本語法
函數名.apply(Object,[參數1,參數2,...])
函數名.call(Object,參數1,參數2,...)
共同點:都可以用來改變this的指向
不同點:兩者中第一個參數均為Object,apply只有兩個參數,其中第二個參數為數組;call為多個參數
接下來通過一個例子使用並分析apply和call
var obj1 = { name:"張三", age:20 }; var obj2 = { name:"李四", age:30, fun:function(name,todo){ console.log(this.name+"已經"+this.age+",他準備去和"+name+todo) } };
obj2.fun.apply(obj1,['小紅','相親'])//張三已經20,他準備去和小紅相親
obj2.fun.call(obj1,'小紅','相親')//張三已經20,他準備去和小紅相親
//這兩句的得出來的結果是一樣的,參數傳遞也只有是按照數組去傳遞還是以多個函數去傳遞,
//根據結果我們也可以看出,obj1調用了obj2的fun方法(不然顯示的數據也不會是obj1的屬性值)
//可以看出函數的第一個參數是用來指代上下文的this指向,
//既然兩個函數可以改變this指向,那麼接下來我們看幾組不同的代碼
//
obj2.fun.apply(obj2,['小紅','相親'])//李四已經30,他準備去和小紅相親 obj2.fun.call(obj2,'小紅','相親')//李四已經30,他準備去和小紅相親 // //我們從結果可以得出,第一參數由於是obj2, //故結果得出來是指是obj2的屬性值 //
obj2.fun.apply(null,['小紅','相親'])//已經undefined,他準備去和小紅相親 obj2.fun.call(null,'小紅','相親')//已經undefined,他準備去和小紅相親 obj2.fun.apply(undefined,['小紅','相親'])//已經undefined,他準備去和小紅相親 obj2.fun.call(undefined,'小紅','相親')//已經undefined,他準備去和小紅相親 // //由於指向的this為空,所以得出來的值為undefined //