美文网首页
JavaScript的apply和call区别

JavaScript的apply和call区别

作者: kim_jin | 来源:发表于2018-09-11 11:43 被阅读0次

    Function.prototype.call或是Function.prototype.apply都是非常非常常用的方法,他们的作用也是一样的,区别就在于传入的参数是不一样的。
    apply接受两个参数,第一个参数指定了函数体内部的this对象的指向,第二个参数是一个带下标的集合,这个集合可以是数组也可以是类数组,apply方法把这个集合中的元素做为参数传递给调用的函数。

    var func = function ( a , b , c ){
        alert([ a , b , c ])  // [1 , 2 , 3]
    }
    func.apply(null , [1 , 2 , 3])
    

    call传瑞的参数的数量是不固定的,和apply相同,第一个参数代表函数体内部的this的指向,从第二个参数开始,每一个参数会依次的传入函数中。
    call是包装在apply上面的语法糖,如果我们明确的知道函数接受多少个参数,还是应该选择实参和形参一一对应。
    当我们使用call和apply的时候,我们第一个传入的参数是null,函数体的this会指向默认的宿主对象,在浏览器中就是window

    call和apply的用途

    1.改变this的指向

    var obj1 ={
      name : 'kim'
    }
    var obj2 = {
      name :'john'
    }
    window.name = 'window';
    var getName = function(){
      console.log(this.name);
    }
    getName(); //window
    getName.call(obj1); // kim
    getName.apply(obj2); //john
    

    借用其他对象的方法

    ‘借用构造函数’,实现类似继承的效果

    var A = function(name){
      this.name = name
    };
    var B = function(){
      A.apply(this ,arguments);
    }
    B.prototype.getName  = function(){
      return this.name;
    };
    var b  = new B('kim');
    console.log(b.getName()); //kim
    

    相关文章

      网友评论

          本文标题:JavaScript的apply和call区别

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