this是誰?

JavaScript中的this跟面嚮對象語言中的this有些區別,在實際編碼中需要注意一些小問題。


		name = 'pxd';
		var obj = {name:'java', t:function(){
			alert(this.name);
		}};
		var temp = obj.t;
		temp(); //pxd

name相當於是一個全局變量,類似於:window.name = 'pxd';

temp變量也相當於一個全局變量,類似於:widnow.temp = obj.t;

因此,t()函數中的this指向的就是window,也就是window.name,結果就是pxd。


		name = 'pxd';
		var obj = {name:'java', t:function(){
			alert(this.name);
		}};
		var dog = {name:'php'};
		(dog.t = obj.t)(); //pxd


這裏要看明白,需要理解一點,就是(...)();第一個括號的內容是一個表達式,那這個表達式的值是多少呢?

其實這個表達式的值就是t函數,將上面的代碼轉換一下就是如下形式:


		name = 'pxd';
		(function(){
			alert(this.name);
		})();

因此,這個方法即不是dog調用的,也不是obj調用的,相當於(null.t())();,這裏的null(調用者)被編譯器解釋成全局的window了,所以結果是pxd。


注意點:

一般的方法請不要使用this,帶this的方法一般爲實例對象的構造方法,不然的話將會污染全局變量。



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