JS中的apply,call

    科技2022-07-11  100

    一句代码([].slice.apply(obj))引起了一篇博客。

    在JavaScript中,call和apply作用是一样的,都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部this的指向。

    function test(){ console.log(this); } let obj = { name:"Ghui", age:24, }

    这里先定义了一个方法和一个对象。我们直接运行方法时,结果是这样的:

    这样就改变了test方法的this指向:

    当我们用call方法时:

    得到一样的结果;

    function test(n,m){ console.log(this) console.log(n + m) } let obj = { name:"Ghui", age:24, }

    其实apply,call还可以传参数:

    总结:

            apply和call方法的作用:         专门用于修改方法内部的this

            格式:         call(对象, 参数1, 参数2, ...);         apply(对象, [数组]);

     

    那么[].push.apply(obj, arr);又是什么意思呢?

    很明显[]表示一个空数组,继承了数组的方法和属性;

    let arr = [1,2,3,4,5]; let obj2 = {};

    当我们[].push.apply(obj2,arr)输入,则有以下结果

    总结:

    [].push.apply(obj2,arr),表示改变数组方法的this指向(指向obj2),给obj2依次添加arr的每一个元素,得到一个伪数组,有length属性,不具有数组的方法。

    Processed: 0.094, SQL: 8