美文网首页
对JavaScript函数的apply或call方法的一点思考

对JavaScript函数的apply或call方法的一点思考

作者: gaoshu883 | 来源:发表于2019-07-25 22:36 被阅读0次

    一直以来都对JavaScript函数的apply或call方法,摸不着头脑。不知道它们到底有什么用处,也不知道它们的精髓在哪里。
    最近因为时不时总能碰到它们,也就有了要搞清楚的决心,沉下心思考倒也有了一些成果。apply和call的区别挺小,主要就是第二个参数的形式不同,前者为参数数组,后者为参数列表。下面的内容均以apply为代表进行。
    先来看两个应用实例,其一:

    var arr1 = [1,2,3];
    var arr2 = [4,5,6];
    Array.prototype.push.apply(arr1,arr2); // => arr1.push.apply(arr1, arr2);
    console.log(arr1);  // [1,2,3,4,5,6]
    console.log(arr2); // [4,5,6]
    

    其二:

    var arr = [100,22,0,-12,33];
    var max = Math.max.apply(null, arr); //  100
    var min = Math.min.apply(null, arr); //  -12
    

    JavaScript里的方法主要有静态方法,如Date.now;实例方法,如arr.push;全局方法,如parseInt几种类型。不管是怎么的方法,我们都可以把它们的调用方式归结为一种形式obj1.Method(arguments)

    Date.now() => window.Date.now()
    arr.push(1)
    parseInt(12.21) => window.parseInt(12.21)
    

    也就是说,方法的调用有三个组成组分:对象、参数、方法。

    arr.push(1) => arr是对象,1为参数,push为方法
    

    对象.方法(参数)这也是最常见的一种调用形式,但是这并不是唯一的形式。譬如,这篇文章的主人公apply,它的加入能让函数调用转换成另外一种形式:方法(对象,参数)

    arr.push(1) => arr.push.apply(arr, [1])
    

    arr.push.apply(arr, [1])中,arr.push整个表示方法,你不能写成push,但是却可以写成Array.prototype.push
    所以,apply的出现修改了函数调用的方式,而且调用的时候,可以传递数组为参数。

    相关文章

      网友评论

          本文标题:对JavaScript函数的apply或call方法的一点思考

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