js學習筆記之call與apply函數(抄摘)

 

 

函數上 下文

在Java或者C/C++等 語言中,方法(函數)只能依附於對象而存在,不是獨立的。而在JavaScript中, 函

數也是一種對象,並非其他任何對象的一部分,理解這一點尤爲重要,特別是對理解函數式的JavaScript

非 常有用,在函數式編程語言中,函數被認爲是一等的。

函數的上下文是可以變化的,因此,函數 內的this也是可以變化的,函數可以作爲一個對象的方法,也可

以同時 作爲另一個對象的方法,總之,函數本身是獨立的。可以通過Function對 象上的call或者apply函

數來修改函數的上下文:

 call和apply

call和apply通常用來修改函數的上下文,函數中的this指針將被替換爲call或 者apply的第一個參數

Js代碼

//定義一個人,名字爲jack

 var jack = {

 name : "jack",

 age : 26

 }

 

 //定義另一個人,名字爲abruzzi

 var abruzzi = {

 name : "abruzzi",

 age : 26

 }

 

 //定義一個全局的函數對象

 function printName(){

 return this.name;

 }

 

 //設置printName的上下文爲jack, 此時的this爲jack

 print(printName.call(jack));

 //設置printName的上下文爲abruzzi,此時的this爲abruzzi

 print(printName.call(abruzzi));

 

 print(printName.apply(jack));

 print(printName.apply(abruzzi));

只有一個參數的時候call和apply的使用方式是一樣的,如果有多個參數:

Js代碼

 setName.apply(jack, ["Jack Sept."]);

 print(printName.apply(jack));

 

 setName.call(abruzzi, "John Abruzzi");

 print(printName.call(abruzzi));

setName.apply(jack, ["Jack Sept."]); print(printName.apply(jack));

setName.call(abruzzi, "John Abruzzi"); print(printName.call(abruzzi));

得到的結果爲:

Js代碼

 Jack Sept.

 John Abruzzi

Jack Sept. John Abruzzi

apply的 第二個

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章