call和apply的用法和区别

之前一直傻傻分不清楚call和apply,每次用的时候都去查语法,然鹅,这两个方法在工作中却经常用到。今天整理下,希望自己能搞清楚,今后工作中不在需要查语法。

定义

自己总结出来:就是去借用别的对象的方法,为己所用,也是重用代码的一种方式,简单理解,打个生活例子,比如家里来客人了,吃饭时候发现家里少一个凳子,出去买有点远,刚好跟邻居家里关系不错,就去邻居家借了一个凳子用一下,借来后,这个凳子就可以归你所用。这里自己家和邻居家都分别是一个对象,而凳子是一个方法。

call()语法

比如对象2借用对象1的方法

对象1.someFun.call(对象2,参数1,参数2,...)

call()实例

先创建一个obj1的对象
var obj1={
name:"obj1",
say:function(who){
return who+',I am '+this.name;
}
}

调用obj1的say方法:

obj1.say("hi")  //hi,I am obj1

在创建一个obj2的方法

var obj2={
name:"obj2"
}

我们想让obj2去调用obj1的say方法

obj1.say.call(obj2,"hi")   //hi,I am obj2

可以看到我们已经调用成功了

apply()语法

比如对象2借用对象1的方法

对象1.someFun.call(对象2,[参数1,参数2,...])

与call相同,只是传参方式不同,需要用数组传参

apply()实例

那么上一个例子中,我们可以用apply的方式

obj1.say.apply(obj2,["hi"])   //hi,I am obj2

得出与call一样的结果

总结

apply和call都是继承,作用一样,都是在特定的作用域中调用函数,以扩充函数赖以运行的作用域。所以,若是在对象内调用别的对象的方法,则this指向会改变,因为作用域发生了改变

猜你喜欢

转载自www.cnblogs.com/zhupanpan/p/9486488.html