zoukankan      html  css  js  c++  java
  • call()和apply()的区别

    call和apply的相同点是:1、都可以调用函数;2、都可以改变this的指向

    function add(c, d) {
        return this.a + this.b + c + d;
    }
    var strObj = { a: 1, b: 2};
    console.log(add.apply(strObj,[3,3])); 
    console.log(add.call(strObj,3,3)); 
    //以上两个打印结果都是 9

    不同点:

    1、call的多个参数, 第一个参数是this指向的对象,后面的参数均是传入Function的参数,有两个就是传给Function两个参数,有三个就是传了三个,有几个传几个;

    2、apply的只有两个参数,第一个参数是this指向的对象,第二个参数是传入Funtion的参数组成的数组。

    apply实现取出数组中的最值:

    //数组中的最大值:
    var arr=[2,4,8,5,67,89,64,32,697]
    Math.max.apply(Math,arr) //打印结果是 697
    
    
    //数组中的最小值:
    var arr=[2,4,8,5,67,89,64,32,697]
    Math.min.apply(Math,arr) //打印结果是 2
    
    
    //注意:因为apply第一个值是可以改变this的指向,这个案例不需要改变this指向,那么我们就指向调用者,所以第一个参数就传值Math

    apply可以通过Array.prototype.push实现两个数组的合并:

    push方法没有提供push一个数组,但是它提供了push(param1,param2...paramN),所以也可以用apply来转换一下这个数组

    var arr1=[2,8,5,54,82,55];
    var arr2=[6,4,35,34,21,93,432,23]
    Array.prototype.push.apply(arr1,arr2);   //打印结果是5
     //得到合并后数组的长度,因为push就是返回一个数组的长度

    也可以这样理解,arr1调用了push方法,参数是通过apply将数组转换为参数列表的集合。

    当然,也有人可能会说数组合并也可以用数组的concat方法,可以是可以,但是要清除其区别是concat使用之后返回的是一个数组(当然也可以获取其长度),而通过apply将数组转化的结果是一个集合的长度。不同场景可以区别使用。

  • 相关阅读:
    Silverlight 学习笔记(二)silverligth 界面布局
    (C#)WinForm窗体间传值
    软件开发所需要的十三个文档
    XP下安装SQL2000企业版本(转载)
    .net 框架下快速Web开发(一)——纠结的里程
    .net MVC 框架调试过程中,产生大量的临时文件
    认识NHitenate
    如何循序渐进向.Net架构师发展[转载]
    核桃煲鸡汤
    .NET获取客户端信息 (C#)
  • 原文地址:https://www.cnblogs.com/web001/p/14807633.html
Copyright © 2011-2022 走看看