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指向会改变,因为作用域发生了改变

 

posted @   zhupan  阅读(1037)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示