看了阮一峯的this講解,下面是個人理解:app
總結來講 this指向 調用this所在方法 的對象;函數
例子1this
function test(){
this.x = 1;
console.log(x);
}
test();//1
由於調用test()方法是window即全局,因此這時的this指向全局code
爲了證實的確是改變了全局變量看下面的例子,在外面給x賦值了2,可是在test裏面仍是會被改變
例子2對象
var x = 2;
function test(){
this.x = 1;
console.log(x);
}
test();//1
function test(){
this.x = 1;
}
x = 2;
var a = new test();
console.log(a.x);//1
console.log(x);//2
能夠看出第一個的x只是指向a這個對象,而第二個x是指向Window做爲全局變量繼承
function test(){
console.log(this.x);
}
var a = {};
a.func =test;
a.x = 2;
a.func();//2
這裏能夠看出來test方法是被a對象調用,因此this指向a,因此this.x 實際上是 a.x ,因此是2io
var x = 1;
function test(){
console.log(this.x);
}
var a = {};
a.x = 2;
a.func = test;
a.func.apply();//1
a.func.apply()表明是window繼承a的func屬性即test方法,因此執行了test ,這時這裏的this指向是window,由於是window調用的,因此是1console