js Apply 和call 的作用及区别

本文探讨了JavaScript中Apply和Call的功能及其区别。当函数中的this没有明确指向时,默认指向window。通过Call和Apply可以强制改变this的指向,如指定为字符串或对象。Call和Apply的主要差异在于传递参数的方式:Call直接传递参数列表,而Apply则接受一个包含参数的数组。在实际应用中,两者在指定this和参数传递上有所不同,但效果相似。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

Apply 和call 的作用及区别

**

  •  Call和apply的作用都是强制改变this的指向
     Call和apply的区别在于传参时的不同,call和apply的的第一个参数都是对象,第二个参数call传的是单个参数,
     而apply传的是一个数组或者是一个参数
    

当this没有指向时,this指向window

function show(a, b) {
console.log(this);//window
console.log(a,b);//1,2
}
show(1,2);

当用call强制this指向时

function show(a, b) {
console.log(this);//String { “show” }
console.log(a,b);//1,2
}
show.call(“show”,1,2);

这时的this就被强制改为字符串show
当然也可以是个对象

var num = {
a:3,
b:4
}
function show(a, b) {
console.log(this.a,this.b);//3,4
}
show.call(num);

当call传入对象num时,this就指向对象num,这时this.a 就是num的a,this.b就是num的b。

当用apply强制this指向时

function show(a, b) {
console.log(this);//String { “show” }
console.log(a,b);//1,2
}
show.apply(“show”,[1,2]);

这跟call调用的效果是一样的
用样的apply第一个参数也可以是对象

var num = {
a:3,
b:4
}
function show(a, b) {
console.log(this.a,this.b); //3,4
}
show.apply(num);

结果也是一样。

两者的区别

当用call第二个参数传的是数组或者对象时

function show(a, b) {
console.log(this);//String { “show” }
console.log(a,b);//Array [ 1, 2 ],undefined
}
show.call(“show”,[1,2]);

这时参数分配时a就是数组[1,2],b就没有分配到就显示undefined。
好了,这是我对call和apply的一点理解,如有错误,请大哥们指正哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值