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

来源:7-1 关键词(上)

qq_慕先生0342934

2020-06-11 23:38:12

<!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回答

好帮手慕言

2020-06-13

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

祝学习愉快~

0
hq_慕先生0342934
h 嗯,好的,谢谢老师耐心解答
h020-06-13
共1条回复

好帮手慕言

2020-06-13

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

http://img.mukewang.com/climg/5ee42f5609cb9ac203750349.jpg

控制台,指向的是sub

http://img.mukewang.com/climg/5ee42f7809fa08c804100175.jpg

祝学习愉快~

0
hq_慕先生0342934
h 嗯,老师我可以理解为虽然this指向另外的了,但是自身函数使用到this来定义指向,没法指向别的函数,所以还是用原本的
h020-06-13
共1条回复

好帮手慕言

2020-06-12

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

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

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

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

0
hq_慕先生0342934
h 那老师意思是不是说如果有this属性就会改变指向,没有this就不会发生变化么
h020-06-12
共1条回复

0 学习 · 14456 问题

查看课程