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的方法一般爲實例對象的構造方法,不然的話將會污染全局變量。