JavaScript中this對象
? 在js的函數(shù)中經(jīng)常看到如下語句,不明白有什么作用。
function? person(name){
??????? this.name=name;
}
this對象是誰取決于函數(shù)被調用的方式,在JavaScript中,函數(shù)具有四種調用方式:
一、直接調用,此時函數(shù)中的this在ES3/ES5非嚴格模式下為全局對象,在瀏覽器中即為window
var x=1;
function test(){
??????? alert(this.x); 此時this為window
}
test(); //結果為1
二、某個對象的方法調用,這時this指這個上級對象
function test(){
? ? ? ? alert(this.x); //此時this指o
}
var o={};
o.x=1;
o.m=test;
o.m(); //輸出為1
三、作為構造函數(shù)調用
? 所謂構造函數(shù),實際上就是通過這個函數(shù)生成一個新的對象,此時this就是指這個新對象
function test(){
? ?? this.x=1;? //this為o
}
var o=new test();
alert(o.x); //輸出為1
? 為了表明this不是全局對象,對代碼做如下調整:
var x=2;
function test(){
?????? this.x=1;
}
var o = new test();
alert(x); //結果為2,表面全局變量的x根本沒有變
四、apply調用
? apply()是函數(shù)對象的一個方法,它的作用是改變函數(shù)的調用對象,它的第一個參數(shù)就表示改變后的調用這個函數(shù)的對象,因此this指的就是這個第一個參數(shù)
var x=0;
function test(){
?????? alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m.apply(); //結果為0
?? apply()參數(shù)為空時,默認調用全局對象,所以這時的運行結果為0,此時,this為全局對象,如果最后一行改為
o.m.apply(o);? //結果為1