关于面向对象代码疑难解答

关于面向对象代码疑难解答

问题:老师有一处问题没想明白:

红框处为何不是直接this[role]()赋值给s,而多加一个new调用this[role]这个内置函数体赋值给s?这两种写法的s输出结果相同,为什么多此一举呢?

代码:

https://img1.sycdn.imooc.com//climg/63e1d12809d6b9d105950493.jpg

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

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

1回答
好帮手慕星星 2023-02-07 12:37:44

同学你好,这两种写法结果是不一样的,new会将函数实例化为对象。例如:

https://img1.sycdn.imooc.com//climg/63e1d52d0928750506220118.jpg

https://img1.sycdn.imooc.com//climg/63e1d53109a7a7ef07010059.jpg

不加new就是普通函数调用

https://img1.sycdn.imooc.com//climg/63e1d551096befce05940165.jpg

函数没有返回值,结果为undefined

https://img1.sycdn.imooc.com//climg/63e1d563095a694e05220056.jpg

我们想要的是第一种结果,输出为对象。

祝学习愉快!

  • 提问者 FrontSiegeLionLang #1

    老师:那不加new打点调用时,函数中的this就是windon对象是吧,相当于在设置全局变量,所以没有返回结果是吧?

    https://img1.sycdn.imooc.com//climg/63e1d551096befce05940165.jpg

    https://img1.sycdn.imooc.com//climg/63e1d12809d6b9d105950493.jpg

    2023-02-08 12:53:05
  • 如果只是这里不加new

    https://img1.sycdn.imooc.com//climg/63e34c5d094d609c04070073.jpg

    this[role]()中的this不是window对象,是UserFactory对象。因为满足if条件才会执行语句,this为实例化后的UserFactory对象。

    普通函数调用想有返回结果,需要return手动返回才可以。不要弄混了。

    2023-02-08 15:38:54
  • 明白了  谢谢老师

    2023-02-09 09:09:38
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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