博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈JavaScript的函数的call以及apply
阅读量:6899 次
发布时间:2019-06-27

本文共 992 字,大约阅读时间需要 3 分钟。

我爱撸码,撸码使我感到快乐!

大家好,我是Counter。
今天就来谈谈js函数的call以及apply,具体以代码举例来讲解吧,例如有函数:

function func(a, b) {     return a + b; }

非常简单的一个函数,返回a + b 的结果,那么这边可以用到函数的call方法,call方法可以是函数在那个对象中执行,就好比在这个对象中,增加一个属性,是这个函数,让调用这个函数,执行完之后删除这个函数属性。

就比如我有个对象 obj = { } 就比如空对象,那么我可以用到函数的call方法执行,先说说call方法的语句,function.call(Object, param1, param2…)。apply方法类似,只不过传递的参数方式不一样,function.apply(Object, [param1, param2…])。就拿上面函数以及这个空对象举例,那么我可以这样来调用函数,func.call(obj, 1, 2); 函数执行后结果为:

 

结果为3。是不是感觉为什么要这样转过来转过去,这么麻烦,我直接func(1, 2)一执行不是也返回3,还剩了你那么麻烦,但是我这边强调,如果你这个函数是这种构造,看好了

function func() {    return this.a + this.b;}

对象为obj = { a: 1, b: 2} 那么这个时候你就是想用到这个对象里的值,就必然要这样func.call(obj); 如果在全局作用域下,有变量var a = 2; var b =3的话,那么此时,你想用到obj里的a和b,如果你还是直接调用函数func()那么将返回你想要的值3吗,答案肯定是不能的,注意此时的函数里的this指向,当前这个函数是在全局作用域下运行的,就是window调用它,我们有一句话那就是,谁调用的这个this就指向谁,显然这个时候this是指向window的,你不相信吗,没事我都帮你验证了:

显然结果就变为5了,明显这个不是我们想要的结果,那么此时函数的call就派上用场了,你想要obj对象里的属性值,那么func.call(obj);那么this就指向obj了,结果就是我们想要的。

 

转载于:https://www.cnblogs.com/Counterrr/p/10619068.html

你可能感兴趣的文章
snakemake--我最喜欢的流程管理工具
查看>>
如何用 Python 和 gensim 调用中文词嵌入预训练模型?
查看>>
nginx三种安装方式
查看>>
陷阱:千万不要随便把serlvet.jar之类的包放在系统的classpath下面
查看>>
K8S有状态服务-云盘扩容解决方案
查看>>
Java8集合源码解析-Hashtable源码剖析
查看>>
飘刃 v0.0.10 首次发布,超快执行速度的 Vue 项目构建工具
查看>>
ssh服务介绍
查看>>
微信分享链接,JS-SDK应用
查看>>
NSQL数据库的5种经典
查看>>
阿里云授权服务中心解答阿里云备案相关疑问
查看>>
一些收集的MikroTik RouterOS破解版虚拟机VMware
查看>>
wordpress无法更新为最新版本
查看>>
爬虫代码编写中会遇到的字符处理的坑
查看>>
SSM-Spring-09:Spring中jdk动态代理
查看>>
我为NET狂官方面试题-数据库篇
查看>>
HBase集群安装
查看>>
Ubuntu终端字体大小设置快捷键
查看>>
[20180625]函数与标量子查询13(补充)
查看>>
Python面试问题整理(附答案)
查看>>