**
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的一点理解,如有错误,请大哥们指正哈!