天天看點

this的指向

this的指向在很多時候會把人弄的很懵,但是筆者可以肯定的說,你看完這篇文章絕對能弄懂this的指向。

在不同的場景this分别指向誰:

一:純粹的函數調用

var x = 1;
function test() {
	console.log(this.x)		//指向window,輸出1
}
test()		//這個其實是window.test()的簡寫
           

此時是window調用的test方法,是以函數體裡的this就指向了window。

二:作為對象的方法調用

function test () {
	console.log(this.x)		//指向obj,輸出2
}
var obj = {};
obj.x = 2;
obj.m = test;
obj.m();
           

此時的test函數被用作了obj對象的方法來調用的,是以test裡的this就指向了obj。

三:作為構造函數調用

var x = 4;		//定義全局變量,為了用來測試
function Test () {
	this.x = 11;	//this指向newObj
}
var newObj = new Test();
console.log(newObj.x)	//輸出11
console.log(x)		//輸出結果為4,表明全局變量沒有被this.x影響
           
var x = 0;
function test() {
	console.log(this.x);
}
var obj = {};
obj.x = 1;
obj.m = test;
obj.m.apply();	//0
test.apply(obj);	//1
new test();
test.apply();	//0
           

總結:

  1. 通常在函數中的this指向的是調用函數的哪個對象(誰調用指向誰)
  2. 事件函數中的this通常指向的是綁定事件的事件源元素
  3. 構造函數中的this,(使用new調用構造函數建立對象),通常指向的是new所建立出來的對象本身
  4. 全局範圍的this通常指向的是全局對象(浏覽器中是window)

一句話總結: