结果为啥是1啊

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕然然 2021-09-27 17:30:16

同学你好,原因如下:

首先,这句代码 var obj1 = obj.a() 表示:调用obj对象中的方法a,并将返回值赋给变量obj1。

方法a的调用方式为:对象打点调用它的方法函数【规则1】,则函数中的上下文(this)是这个打点的对象。

所以,在函数a中,this指向obj,this.b为obj对象的属性b,如图

https://img1.sycdn.imooc.com//climg/61518c790972380e10290554.jpg

然后,将方法a的返回值this.b赋给变量obj1(相当于 obj1 = this.b),此时obj1变为一个函数,如图

https://img1.sycdn.imooc.com//climg/61518e0909c3ee9d12670563.jpg

最后,调用obj1函数,即obj1(),此时是以圆括号的形式调用的【规则2】,所以函数中的this指向window对象,this.c是window对象的属性c,如图

https://img1.sycdn.imooc.com//climg/61518f1d09748db414960603.jpg

祝学习愉快!

  • 提问者 球球不一般 #1

    https://img1.sycdn.imooc.com//climg/6151a66e0919659807760620.jpgobj1()调用函数OBJ对象里只有A和B啊没有1啊

    2021-09-27 19:12:03
  • 好帮手慕然然 回复 提问者 球球不一般 #2

    同学你好,obj1()虽然调用的是obj对象中的函数,但是由于它的调用方式是以圆括号的形式调用的,所以该函数中的this指向的是window对象,this.c获取的是window对象的属性c,而不是获取obj对象的属性c,所以obj对象中没有属性c也没关系。

    只要window对象中有就可以了,而且window对象中是有属性c的,如图

    https://img1.sycdn.imooc.com//climg/61528e2109654aa715700547.jpg

    祝学习愉快!

    2021-09-28 11:40:47
  • 提问者 球球不一般 回复 好帮手慕然然 #3

    最后,调用obj1函数,即obj1(),此时是以圆括号的形式调用的【规则2】,所以函数中的this指向window对象,this.c是window对象的属性c,这句话不太明白

    2021-11-28 20:50:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师