请老师给讲讲,上面那个add.call(sub,5,3)为啥返回8,为啥不调用sub方法

请老师给讲讲,上面那个add.call(sub,5,3)为啥返回8,为啥不调用sub方法

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Document</title>

</head>

<body>

    <script>

         //补充代码

         // function add(x,y){

         //    alert(x+y);

         // }

         // function sub(x,y){

         //    alert(x-y);

         // }

         // add.call(sub,5,6);

         //老师这里不是应该调用sub弹出个-1么,第一个参数不是设置指向sub了么

         //下面这个不就是设置了指向cat就用了cat的属性么,这两个为啥不一样啊

         function Animal(name){

            this.name = name;

            this.info = function(){

                alert(this.name);

            }

         }

         function Cat(name){

            this.name = name;

            this.info = function(){

                alert(this.name);

            }


        }

        var ani = new Animal('dog');

        var cat = new Cat('cat');

        ani.info.call(cat,'');

    </script>

</body>

</html>


正在回答

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

3回答

同学你好,可以理解为虽然改变了add函数的this指向,但是add函数中没有使用到this呦

祝学习愉快~

好帮手慕言 2020-06-13 09:44:55

同学你好,如果没有使用this,只是看不出来效果而已,可以在add函数中打印this,

http://img1.sycdn.imooc.com//climg/5ee42f5609cb9ac203750349.jpg

控制台,指向的是sub

http://img1.sycdn.imooc.com//climg/5ee42f7809fa08c804100175.jpg

祝学习愉快~

  • 提问者 qq_慕先生0342934 #1
    嗯,老师我可以理解为虽然this指向另外的了,但是自身函数使用到this来定义指向,没法指向别的函数,所以还是用原本的
    2020-06-13 14:48:15
好帮手慕言 2020-06-12 11:45:51

同学你好,可以参考下方:

1、call的第一个参数是传入this的指向。像这里就是把subs的this传递给了add,那么add中如果有this,指向的就是subs。代码中只是一个运算,没有使用到this,所以看不出来效果。

2、在同学的第二段代码中,是有使用this的;改变了这个this的指向,使其指向了cat,所以访问的是cat中的name属性。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 qq_慕先生0342934 #1
    那老师意思是不是说如果有this属性就会改变指向,没有this就不会发生变化么
    2020-06-12 21:55:19
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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