apply 和call的用法

关于apply和call二者在作用上是雷同的,但二者在参数上有区分的。
关于第一个参数意义都一样,但对第二个参数:

apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,
call则作为call的参数传入(从第二个参数最先)。

func.call(func1,var1,var2,var3) 
func.apply(func1,[var1,var2,var3])

同时运用apply的优点是能够直接将当前函数的arguments对象作为apply的第二个参数传入

(1)基础用法:

function add(a,b)
{
    alert(a+b);
}
function sub(a,b)
{
    alert(a-b);
}

add.apply(sub,[3,1]);
//add.call(sub,3,1);

(2)完成继续:

function Animal(name){    
    this.name = name;    
    this.showName = function(){    
        alert(this.name);    
    }    
}    

function Cat(name){  
    Animal.apply(this, [name]);
    //Animal.call(this, name);  
}    

var cat = new Cat("Black Cat");   
cat.showName(); 

(3)其他用法
Math.max 能够完成获得数组中最大的一项:

由于Math.max 参数内里不支撑Math.max([param1,param2]) 也就是数组,然则它支撑Math.max(param1,param2,param3…),所以能够依据apply的特点来处理 var max=Math.max.apply(null,array),如许随意马虎的能够获得一个数组中最大的一项。(apply会将一个数组转换为一个参数接一个参数的传递给要领)

push要领没有供应push一个数组,然则它供应了push(param1,param,…paramN) 所以一样也能够经由过程apply来转换一下这个数组,即:

var arr1=new Array("1","2","3");
var arr2=new Array("4","5","6");
Array.prototype.push.apply(arr1,arr2); 
    原文作者:gecko23
    原文地址: https://segmentfault.com/a/1190000000725712
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞