1.函數中:function foo(){
return this;
}
函數調用者是誰,就指向誰;直接調用指向window;
2.事件中:html事件中,指向window;dom0事件中,指向事件的觸發者(綁定元素的節點);dom2事件中,非IE中指向綁定的元素節點;IE中直接指向window;
3.閉包中:this指向window;
4.對象中:this指向當前對象;如果有多級對象包裹,指代上一級對象;
( 1). var foo = {
a:18,
num:{
a:10,
num:function(){
console.log(this.a);//10
}
}
}
foo.num.num();
(2).
var foo = {
a:18,
num:{
num:function(){
console.log(this.a);//undefined
}
}
}
foo.num.num();
5.call函數和apply函數能改變this的指向,bind函數也能改變函數指向;
關於更多改變函數指向問題,請觀看博客:http://www.cnblogs.com/pssp/p/5215621.html;
6.構造函數模塊:
有坑之處,請讀博客:http://www.cnblogs.com/pssp/p/5216085.html#
總結:構造函數中,返回值是基本數據類型,那麼this指向構造函數的實例;返回值是對象則this指向該對象;
function Foo(){
this.user = 'my';
return {};
}
var na = new Foo();
console.log(na.user);//返回值undefined;
function Foo(){
this.user = 'my';
return 1;
}
var na = new Foo();
console.log(na.user);//返回值my
基本實例(this的指向):
結果:
this的指向問題:前兩個是基本數據類型,this指向實例,所以返回基本數據類型;
後面三個數據類型都是對象,故this指向他們自己本身,this指向數組,而數組中的屬性是下標值分別爲01234等等,故沒有name屬性,會返回undefined;對象中可以自定義屬性,而本題給的是空對象,也沒有name屬性,也會返回undefined;null屬於基本數據類型,故會指向實例,返回null;