js中call的详细介绍,这代码块是什么意思

<script type="text/javascript">
    function Animal() {
        this.name = "Animal";
        this.Say = function () {
            console.log(this);
            console.log(this.name);
        }
    }
    function Cat() {
        this.name = "Cat";
    }
    var animal = new Animal();
    var cat = new Cat();
    //animal.Say();
    animal.Say.call(cat);
  • 是不是 .调用animal.Say里面的this已经切换到指向cat对象,所以console.log(this);
  • 打印了cat
  • console.log(this.name); 打印了cat

这个call好懵逼呀,到底是什么东西..我实在搞不懂能不能来个例子 或者给我解释一下 , ,谢谢了

阅读 2.5k
4 个回答

call是用于函数指定作用域的方法。call在Function的原型链上Function.prototype.call

call的第一个参数就是this的指向,null/undefined或者不传,this默认指向window。

你传了cat,那么this就会指向cat(object)。你还可以带参数

function animal(leg, name) {}

animal.call(cat, 2, '小猫');

类似的还有apply,区别就是apply的参数用数组传进去

animal.apply(cat, [2, '小猫']);

关于作用域的绑定,还可以了解es5新出的bind方法,

记得吴秀波主演的虎啸龙吟里有个桥段,陈群想要推行《九品中正制》,但是没有魄力,怕担责,于是找到司马懿,说哎兄弟,你(this)帮我执行吧,责任也你背行不行?司马懿:行。
换成代码便是这样的:
陈群.Say.call(司马懿)
虽然说Say的主体是陈群,但是责任(this)则换成了司马懿,在Say里面调用this的话,便是司马懿

cat 继承了Animal 的属性和方法。
借助了Animal的构造函数完成了初始化属性和方法的目的

代码可以修改一下

function Cat() {
    Animal.apply(this,arguments);
    this.name = "Cat";
}

这样所有的 Cat 实例化的对象都会继承 Animal。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏