JavaScript中apply()和call()的差别

1、apply()和call()的作用都是用于更改this,两者的使用格式如下:
apply(参数1,参数2):参数一是用于替换this的,参数二可以不用传入,一般传入数组。如果所替换this的函数需要传入参数,那么参数二数组中的元素会被依次取出当做参数传入函数中。
call(参数1,参数2,参数3….参数n):参数一是用于替换this,参数二和后面的参数用于取出当做参数传入函数中。
2、实例1:用一个对象替换函数的this。代码将obj对象的内容都替换成了this。也可以取出obj对象内部的值作为this的替换对象。

function text(){
    console.log(this);//this指向调用时所在函数所绑定的对象
}
// text();//打印的结果为window,此写法类似于window.tetx(),调用的this都是window
var obj={"name":"luck"};
// text.apply(obj);//打印结果:Object { name: "luck" }
text.call(obj);//打印结果:Object { name: "luck" }
text.apply(obj.name);//打印结果:String { "luck" }

这里写图片描述
2、当需要被替换this的函数需要传入参数时,apply()和call()必须要传入多个参数作为函数的参数传入。当apply传入的第二参数为数组时,数组内部的值将会依次被取出作为函数的参数。

var obj1={};
var arr=[2,3,4];
function show(a,b){
    console.log(this);
    console.log(a+b);
}
// show(1,1);//打印结果为window,2
show.apply(obj1,arr);//打印结果为Object {  }空对象和5,只可传入2个参数
show.call(obj1,2,2);//打印结果为Object {  }空对象和4,可传入多个参数

这里写图片描述
3、此处补充push()的用法:push()内部传入的参数可以是指也可以是数组,push用于将参数插入到指定的元素中,放在元素的最后。

var obj2={};
var arr2=[1,3,5,7,9];
arr2.push(10);//直接插入值
console.log(arr2);//打印结果Array(6) [ 1, 3, 5, 7, 9, 10 ]
arr2.push(arr)//push用于插入元素,也可以直接传入值,插入的元素放在最后面
console.log(arr2);//打印结果Array(6) [ 1, 3, 5, 7, 9, (3) […],内部嵌套新的数组

这里写图片描述
4、将数组的值赋值给替换this的对象obj3,将数组的值依次取出并且传入替换的obj3对象中。下面代码被替换的this是push方法内部的this,即将后面取出的值作为push需要传入的值即push的形参,obj3作为push的this。

var obj3={};
var arr3=[1,2,3,4,5,6,7,8,9];
[].push.apply(obj3,arr3);
console.log(obj3);//打印结果为Array(5) [ 1, 3, 5, 7, 9 ]

这里写图片描述
注:上面被作为参数传入的数组是真实的数组,而传入之后给了obj3之后就变成了对象实质为伪数组,具有length属性,满足作为伪数组的条件。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值