首頁  >  文章  >  web前端  >  什麼是JavaScript函數的上下文?

什麼是JavaScript函數的上下文?

伊谢尔伦
伊谢尔伦原創
2017-07-25 11:31:222453瀏覽

函數上下文 

在Java或C/C++等語言中,方法(函數)只能依附於物件而存在,不是獨立的。而在JavaScript中,函數也是一種對象,並非其他任何對象的一部分,理解這一點尤其重要,特別是對理解函數式的JavaScript非常有用,在函數式程式語言中,函數被認為是一等的。

函數的上下文是可以變化的,因此,函數內的this也是可以變化的,函數可以作為一個物件的方法,也可以同時作為另一個物件的方法,總之,函數本身是獨立的。可以透過Function物件上的call或apply函數來修改函數的上下文:

call和apply
call和apply通常用來修改函數的上下文,函數中的this指標將被替換為call或apply的第一個參數,我們不妨來看看JavaScript入門之物件與JSON中的範例:

//定义一个人,名字为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的使用方式是一样的,如果有多个参数: 

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

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

得到的結果為:

Jack Sept. 
John Abruzzi 
apply的第二个参数为一个函数需要的参数组成的一个数组,而call则需要跟若干个参数,参数之间以逗号(,)隔开即可。

以上是什麼是JavaScript函數的上下文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn