浅谈JavaScript的函数的call以及apply

news/2024/7/7 19:23:30

我爱撸码,撸码使我感到快乐!
大家好,我是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


http://www.niftyadmin.cn/n/4606597.html

相关文章

C语言实现密码登录界面,你可能已被盯上!

登录界面是一个网站最重要的部分之一,一个良好的登录界面设计,将会给用户一个良好的使用体验,甚至能够引导非注册用户注册。它不仅仅在界面设计中很重要,也关系着一个网站的用户体验。今天小编用C语言写了一个简单的密码登陆界面 …

我日常的VIM

相信每一vim本书都会介绍给初学者一个叫vimtutor的,可以花几十分钟时间跟着过一边。我总结一下最近看的 移动 只列我用的比较多的命令,所有的注释都用"(vim脚本注释符) 1 h "左2 j "下3 k "上4 l "右&…

OpenCV中关于cvGetCaptureProperty函数

OpenCV中关于cvGetCaptureProperty函数OpenCV中提供了一个函数cvGetCaptureProperty(Capture* cap,int property_index)函数来获取视频文件的一些属性,这是其中的OpenCV中属性的一些宏定义:#define CV_CAP_PROP_POS_MSEC 0#define CV_CAP_PROP_POS_FRAME…

马云:未来两三百年金融是“八二理论” 最大机会在互联网金融

10月16日,蚂蚁金服召开年会,这一天也是蚂蚁金服成立两周年。在10月16日的年会上,蚂蚁金服董事长兼CEO彭蕾将CEO的接力棒交给总裁井贤栋,未来将以蚂蚁金服董事长身份专注公司长期发展、全球化战略、人才培养和文化建设传承。 阿里巴…

【UOJ117】 欧拉回路(欧拉回路)

传送门 UOJ Solution 无解 t1,无向图,当且仅当\(\exists i \ \ in_i \ne out_i\)t2,有向图,当且仅当\(\exists i \ \ in_i是奇数 \& out_i是奇数\)那么剩下的就是模板,写个dfs就可以了。 代码实现 代码戳这里 转载…

关于VM在WIN7中安装出现Error 1935后成功安装的方法

今天我在安装VM的时候也出现了 Error 1935的问题,下面是我成功安装的方法,希望能对大家有所帮助。 主机系统:WIN7旗舰32bit简体中文 ,官方原版VM版本:7.1.4官方原版1.在系统中装一个英文的语言包,没有的话去…

Nginx之配置HTTPS站点

Nginx经常被用于终结SSL连接,可能是因为上游服务器不能够使用SSL。要使用SSL就需要在编译安装时在Nginx的二进制文件中添加--with_http_ssl_module模块,并且要安装ssl证书和秘钥。 以下示例代码表示对客户端和反向代理之间的流量进行加密,主要…

yolo-开源数据集coco kitti voc

1、kitti数据集(参考博客:https://blog.csdn.net/jesse_mx/article/details/65634482 https://blog.csdn.net/baolinq/article/details/78939192)(1)下载数据集和标签,下载第1个图片集 Download left colo…