本文不繫統講解,只解釋幾個特殊例子。
<script>
var obj={
name:"mao",
ftn00:(function(){
console.log(this);
})(),
ftn01:function(){
console.log(this);
return function(){
console.log(this);
}
},//普通
ftn02:(function(){
console.log(this);
return function(){
console.log(this);
}
})()//自調用
}
</script>
請看準上面的對象及他的屬性,下面即將襲來一大波花式調用:
console.log(obj.ftn00);//undefined
window在定義obj時就調用了自調用函數,返回undefined。
obj.ftn01();
obj.ftn01()();
1)obj調用自己的方法,this肯定爲obj
2)第一個括號調用完這個函數就已經結束了,然後返回的匿名函數由window來調用
var ff=obj.ftn01;//此時ff相當於是window的一個屬性
ff();
ff()();
1)window調用自己的屬性
2)同理,匿名函數由window來調用
obj.ftn02();
此時ftn02屬性的值已經是那個返回的函數,所以對象調用自己的屬性方法,this爲這個對象。
var f=obj.ftn02;
f();//window的屬性
window調用自己的屬性。
總結:看this主要看是誰調用了這個方法。