美文网首页
JavaScript爬坑之:apply()与call()的用法和

JavaScript爬坑之:apply()与call()的用法和

作者: hammercui | 来源:发表于2017-05-12 18:24 被阅读0次

    apply与call都是为了动态改变this而出现的

    首先补充知识点:

    this

    javascript的一个关键字,代表函数运行时,自动生成的一个内部对象。随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

    • 在页面中,this可以表示全局对象,方法的调用对象。
    • nodejs中,不太一样,一个js文件就是一个module.exports,this一般指这个module.exports,或者内部方法的调用对象

    apply与call

    前面已经说了applce call是函数对象的方法,允许切换函数执行的上下文环境(context),也就是this在函数中绑定的对象,
    区别是:

    Function.apply(object,[ ]) //后面传参数以数组的形式
    
    Function.call(object,...params) //后面传参数分开传输的
    

    举个例子

    function Cat(hello){
        this.name = "cat";
        this.msg = "i am cat";
        this.say = function(){
          alert(this.name + " say :" + this.msg);
      }
    }
    
    var cat = new Cat("i am a cat");
    cat.say(); //cat say: i am a cat 
    
    var cat = new Cat("i am a cat");
    cat.say(); //cat say: i am a cat 
    var dog = {name:"dog",msg:"i am a dog"};
    cat.say.apply(dog); // dog say :i am a dog
    
    

    新建一个catcat有方法say,但是dog没有方法say,使用apply就是把执行方法saythis或者叫上下文,变成了dog,这时this.namethis.msg就是dognamemsg

    参考文献

    深入浅出 JavaScript 中的 this

    相关文章

      网友评论

          本文标题:JavaScript爬坑之:apply()与call()的用法和

          本文链接:https://www.haomeiwen.com/subject/uxzetxtx.html