JS中的apply,call
一句代码([].slice.apply(obj))引起了一篇博客。在JavaScript中,call和apply作用是一样的,都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部this的指向。function test(){console.log(this);}let obj = {name:"Ghui",age:24,}这里先定义了一个方法和一个对象。
一句代码([].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属性,不具有数组的方法。

更多推荐



所有评论(0)