JS中的apply,call

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值