2 回答

TA貢獻361條經(jīng)驗 獲得超191個贊
this是函數(shù)被調(diào)用的時候,函數(shù)被誰調(diào)用,this就指向誰;
var myfn=new fn()時,是創(chuàng)建了一個實例,然后實例this指向fn,然后_proto_屬性指向fn的prototype屬性;
因此當(dāng)創(chuàng)建好實例,myfn實例上有a和b,(即fn里面的this.a和this.b);它的_proto_屬性(相當(dāng)于fn的prototype屬性)上有b和c;(這里有2個b重名,如果調(diào)用b,會先查找實例上的,如果發(fā)現(xiàn)實例上沒有,再去沿著_proto_屬性去查找);
因此當(dāng)執(zhí)行myfn.b()時(這里在myfn上執(zhí)行b函數(shù),函數(shù)被myfn調(diào)用),
會先在myfn的實例上面去找b,這里它的實例上是有this.a和this.b,這里this指的就是myfn,因此執(zhí)行b()
?this.b?=?function()?{ ????????alert(this.a)???//這里執(zhí)行時函數(shù)是被myfn調(diào)用,因此this還是指向myfn ????}
所以就是alert(myfn.a)也就是alert(0);
當(dāng)執(zhí)行myfn.c()時(這里在myfn上執(zhí)行 c函數(shù),函數(shù)被myfn調(diào)用),
會先在myfn的實例上面去找c,這里它的實例上沒有c,于是在myfn的_proto_(即fn的prototype)屬性上去找c,執(zhí)行c()
?c:?function()?{ ????????this.a?=?30;???????//被myfn調(diào)用,this指向myfn,a覆蓋原來的a; ????????alert(this.a);?????//被myfn調(diào)用,this指向myfn,this.a為30 ????}
所以alert(30)

TA貢獻452條經(jīng)驗 獲得超796個贊
this關(guān)鍵字代表當(dāng)前的對象
所以你代碼中的this.a = 30;之類的代碼,就是調(diào)用這個方法的該對象,為其屬性賦值
同理,this.方法即代表調(diào)用當(dāng)前對象的某個方法
添加回答
舉報