一句代码([].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属性,不具有数组的方法。