亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

this指針 運行結果是什么,麻煩給出詳解,謝謝!

this指針 運行結果是什么,麻煩給出詳解,謝謝!

function fn() {? ? this.a = 0;? ? this.b = function() {? ? ? ? alert(this.a)? ? }}fn.prototype = {? ? b: function() {? ? ? ? this.a = 20;? ? ? ? alert(this.a);? ? },? ? c: function() {? ? ? ? this.a = 30;? ? ? ? alert(this.a);? ? }}var myfn = new fn();myfn.b();myfn.c();
查看完整描述

2 回答

已采納
?
stone310

TA貢獻361條經驗 獲得超191個贊

this是函數被調用的時候,函數被誰調用,this就指向誰;

var myfn=new fn()時,是創建了一個實例,然后實例this指向fn,然后_proto_屬性指向fn的prototype屬性;

因此當創建好實例,myfn實例上有a和b,(即fn里面的this.a和this.b);它的_proto_屬性(相當于fn的prototype屬性)上有b和c;(這里有2個b重名,如果調用b,會先查找實例上的,如果發現實例上沒有,再去沿著_proto_屬性去查找);

因此當執行myfn.b()時(這里在myfn上執行b函數,函數被myfn調用),

會先在myfn的實例上面去找b,這里它的實例上是有this.a和this.b,這里this指的就是myfn,因此執行b()

?this.b?=?function()?{
????????alert(this.a)???//這里執行時函數是被myfn調用,因此this還是指向myfn
????}

所以就是alert(myfn.a)也就是alert(0);

當執行myfn.c()時(這里在myfn上執行 c函數,函數被myfn調用),

會先在myfn的實例上面去找c,這里它的實例上沒有c,于是在myfn的_proto_(即fn的prototype)屬性上去找c,執行c()

?c:?function()?{
????????this.a?=?30;???????//被myfn調用,this指向myfn,a覆蓋原來的a;
????????alert(this.a);?????//被myfn調用,this指向myfn,this.a為30
????}

所以alert(30)

查看完整回答
反對 回復 2016-10-10
?
JustWannaHugU

TA貢獻452條經驗 獲得超796個贊

this關鍵字代表當前的對象

所以你代碼中的this.a = 30;之類的代碼,就是調用這個方法的該對象,為其屬性賦值

同理,this.方法即代表調用當前對象的某個方法


查看完整回答
反對 回復 2016-10-10
  • 2 回答
  • 1 關注
  • 2989 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號