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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐