为了账号安全,请及时绑定邮箱和手机立即绑定

老师讲的含糊其辞啊!

这节课的

  • 对象原型链上的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下载
官方微信