apply方法的使用
我们先来看一段代码:
function f1(){
console.log(this)
}
通过控制台我们知道,f1函数中输出的是window这个对象。但是我们在做项目的时候往往会有需要调用其它对象中的方法,那么这个时候我们怎么办呢,别慌! 重点来了,我们可以使用call和apply来改变this的指向。
咋们再来看一段代码:
var obj={
name:"爱新觉罗.豪",
age:"18",
eat:function(name){
console.log(this.name+"正在吃饭")
}
}
function f1(){
console.log(this.name)
console.log(this.age)
this.eat()
}
f1.apply(obj)
效果图:
通过控制台可以看出,f1函数中的this指向已经指向了obj,能够访问obj中的属性和方法。在这里可能会有人疑问f1函数没有调用怎么控制台会输出结果呢。其实f1.apply(obj)就相当于调用f1函数,并且改变f1函数的指向。
call方法的使用
其实call和apply的用法是一样的,只要你看懂了上面的代码相信你使用call也是小菜一碟。虽然说call方法和apply方法用法是一样的,但是两者还是有区别的。接下来我们看一下两者之间的区别:
var obj={
name:"爱新觉罗.豪",
age:"18",
eat:function(name){
console.log(this.name+"正在吃饭")
}
}
function food(x,y){
console.log("apply方法: "+(x+y))
}
food.apply(obj,[100,150])
function food2(x,y){
console.log("call方法: "+(x+y))
}
food2.call(obj,100,822)
效果图:
通过结果图我们会发现call和apply输出的结果是一样的,但是两者传入的参数不一样,apply方法传入两个参数,第一个参数传入一个对象,并且表示指向指向该对象,第二个参数为一个数组。call方法第一个参数传入的也是一个对象,第二个参数不是数组,而是依次传入。
call和apply方法总结:
相同点:都能够改变this的指向。
不同点:两者传入的参数不一致。