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

為了賬號安全,請及時綁定郵箱和手機立即綁定

老師講的含糊其辭啊!

這節課的

  • 對象原型鏈上的this

這一小節中有這樣一個case:

var?o={f:function(){return:this.a+this.b}}
var?p=Object.creat(o)
p.a=1
p.b=4
console.log(p.f())//5

這里老師講的太含糊其辭了,什么叫this也能指向對象p呀?




我激動了??!不好意思??!

正在回答

8 回答

我感覺從作用域來理解this好一點

0 回復 有任何疑惑可以回復我~

一句話理解this.不用管this在什么方法中。誰調用.this指向誰就對了。

2 回復 有任何疑惑可以回復我~

此時應該是this指向p吧!所以結果。。。。。。

0 回復 有任何疑惑可以回復我~

所以,遇到與面向對象相關的this指向問題時,可以認為JavaScript引擎偷偷的在函數中傳入了一個參數(第一個參數,要牢記!?。皇悄憧床灰?,參數值就是 . 之前的對象。。然后,方法用this來接收了這個對象,然后你就可以在方法中盡情地使用this了。

0 回復 有任何疑惑可以回復我~
#1

proto 提問者

對,我一激動搞錯了,是方法調用的this。。。。
2015-12-13 回復 有任何疑惑可以回復我~

告訴你個技巧,要理解this指向誰并不難。。

比如:

var?o={f:function(){return:this.a+this.b}}

o.f();

可以理解成

f(o);

及把o作為參數傳入了f中,然后f用一個變量叫做this來接收了這個o。。所以在

f中,this.a就相當于 o.a,this,b就相當于o.b

1 回復 有任何疑惑可以回復我~

我覺得你理解可能有點問題。http://img1.sycdn.imooc.com//566d10eb0001e43b03220375.jpg

0 回復 有任何疑惑可以回復我~
#1

proto 提問者

是搞錯了
2015-12-13 回復 有任何疑惑可以回復我~
#2

proto 提問者

搞錯了
2015-12-13 回復 有任何疑惑可以回復我~
#3

木子舟義 回復 proto 提問者

說出來大家分析后比較容易理解。加油吧~
2015-12-13 回復 有任何疑惑可以回復我~
#4

proto 提問者 回復 木子舟義

哦好 這里this指向的是f方法的對象吧?
2015-12-13 回復 有任何疑惑可以回復我~
#5

木子舟義 回復 proto 提問者

對 p 調用就指向p 如果再Object.create 一個 其他的實例。再這個實例調用 就指向這個實例了
2015-12-13 回復 有任何疑惑可以回復我~
查看2條回復

你也確定用var p = Object.create(o); ?給 p.a = 1; 是賦值到o.a上?

0 回復 有任何疑惑可以回復我~
#1

proto 提問者

恩,你試試
2015-12-13 回復 有任何疑惑可以回復我~
#2

proto 提問者

create方法就是原型鏈上的方法
2015-12-13 回復 有任何疑惑可以回復我~
#3

proto 提問者

屬性a b都是原型鏈上的,執行的時候是去遍歷原型對象,不是遍歷實例對象,這就是為啥原型鏈強大的原因
2015-12-13 回復 有任何疑惑可以回復我~
查看1條回復

你確定用var p = new o;能 new出來?

0 回復 有任何疑惑可以回復我~
#1

proto 提問者

new不出來,得把o改造成函數
2015-12-13 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

老師講的含糊其辭啊!

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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