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指向会改变,因为作用域发生了改变
本文来自博客园,作者:zhupan,转载请注明原文链接:https://www.cnblogs.com/zhupanpan/p/9486488.html
· 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应用必不可少的技术