美文网首页JavaScript渣渣到大神手册
JS面向对象--call()和apply()

JS面向对象--call()和apply()

作者: FF_C | 来源:发表于2017-11-30 19:48 被阅读0次

    这两个函数都是函数的方法,只有函数能够打点call() apply(),表示指定的上下文执行这个函数

    function fun(){
      alert(this.age);
    }
    var obj ={
      "name":"小明";
      "age": 12
    }
    fun();   //undefined
    

    下面有一个函数fun,我们现在就是耍无赖,必须让fun里面的this是obj,此时可以用call,apply来指定上下文。

    function fun(){
      alert(this.age);
    }
    var obj ={
      "name":"小明";
      "age": 12;
      "f":fun
    }
    obj.f(); //12
    fun.call(obj);   //12
    fun.apply(obj);
    

    语法:
    函数.call(上下文)
    函数.apply(上下文)

    两个函数的区别是,体现在参数上
    此时我们要执行的fun函数可以接受参数,apply需要用数组体现这些参数,而call必须用逗号隔开,录取期间所有参数:

    function fun(a,b,c){
      alert(a+b+c)
      alert(this.age);
    }
    var obj ={
      "name":"小明";
      "age": 12;
      "f":fun
    }
    
    fun.call(obj,6,7,8);   
    fun.apply(obj,[6,7,8]);  
    

    没有别的区别了,就是传参数的区别

    有什么用?看看求数组的最大值
    我们知道Math.max()方法,只接受单独罗列的参数:
    Math.max(4,55,88,34,789,21) //789
    不能传入数组
    Math.max([4,55,88,34,789,21]) //NaN
    所以此时可以妙用apply,apply可以接受一个数组当做函数的“罗列”的参数
    Math.max.apply(window,[4,55,88,34,789,21]) //789

    相关文章

      网友评论

        本文标题:JS面向对象--call()和apply()

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