资讯专栏INFORMATION COLUMN

apply 和call的用法

animabear / 2786人阅读

摘要:对于和两者在作用上是相同的,但两者在参数上有区别的。会将一个数组转换为一个参数接一个参数的传递给方法方法没有提供一个数组,但是它提供了所以同样也可以通过来转换一下这个数组,即

对于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); 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85329.html

相关文章

  • callapply区别用法

    摘要:和的区别和作用都是把绑定到的作用,即改变的指向,然而唯一的区别就是传递的参数必须得是数组的形式传递,而则直接连续参数传递和在什么地方可以用到呢当一个对象需要调用另外一个对象里面的方法的时候就可以用到和,和可以理解成是继承另外一个对象的方法, call和apply的区别 obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1...

    ideaa 评论0 收藏0
  • callapply区别用法

    摘要:和的区别和作用都是把绑定到的作用,即改变的指向,然而唯一的区别就是传递的参数必须得是数组的形式传递,而则直接连续参数传递和在什么地方可以用到呢当一个对象需要调用另外一个对象里面的方法的时候就可以用到和,和可以理解成是继承另外一个对象的方法, call和apply的区别 obj.call(thisObj, arg1, arg2, ...);obj.apply(thisObj, [arg1...

    animabear 评论0 收藏0
  • 复习javascript中call,apply,bind用法

    摘要:绑定函数被调用时,也接受预设的参数提供给原函数。一个绑定函数也能使用操作符创建对象这种行为就像把原函数当成构造器。 一直很难理解js中的call apply bind,在w3schools,mdn阅读了,也看了很多相关的文章,今天我来写下我理解的call apply bind 首先创建一个函数 function man(){} man.prototype = { name: ...

    darryrzhong 评论0 收藏0
  • JavaScript 中 callapply、bind 用法区别

    摘要:和类似,都是调用函数,并指定函数的值和参数,区别在于传入参数是通过参数列表的形式,传入参数是通过数组的形式方法与前两个不同,它创建一个新的函数,在调用新函数时,会调用原函数,并指定原函数的值和参数。执行的时候并没有调用函数。 简介 JavaScript 中有三个方法Function.prototype.call()、Function.prototype.apply()和Function...

    wind3110991 评论0 收藏0

发表评论

0条评论

animabear

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<