javascript中apply、call和bind的区别
来源:互联网 发布:綦美合 知乎 编辑:程序博客网 时间:2024/06/06 16:55
在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢。
在说区别之前还是先总结一下三者的相似之处:
1、都是用来改变函数的this对象的指向的。
2、第一个参数都是this要指向的对象。
3、都可以利用后续参数传参。
那么他们的区别在哪里的,先看一个例子。
本身没什么好说的,显示的肯定是小王 , 男 , 今年24。
那么如何用xw的say方法来显示xh的数据呢。
对于call可以这样:
对于apply可以这样:
而对于bind来说需要这样:
如果直接写xw.say.bind(xh)是不会有任何结果的,看到区别了吗?call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
那么call和apply有什么区别呢?我们把例子稍微改写一下。
可以看到say方法多了两个参数,我们通过call/apply的参数进行传参。
对于call来说是这样的
而对于apply来说是这样的
看到区别了吗,call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。
那么bind怎么传参呢?它可以像call那样传参。
但是由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。
在说区别之前还是先总结一下三者的相似之处:
1、都是用来改变函数的this对象的指向的。
2、第一个参数都是this要指向的对象。
3、都可以利用后续参数传参。
那么他们的区别在哪里的,先看一个例子。
本身没什么好说的,显示的肯定是小王 , 男 , 今年24。
那么如何用xw的say方法来显示xh的数据呢。
对于call可以这样:
对于apply可以这样:
而对于bind来说需要这样:
如果直接写xw.say.bind(xh)是不会有任何结果的,看到区别了吗?call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
那么call和apply有什么区别呢?我们把例子稍微改写一下。
可以看到say方法多了两个参数,我们通过call/apply的参数进行传参。
对于call来说是这样的
而对于apply来说是这样的
看到区别了吗,call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。
那么bind怎么传参呢?它可以像call那样传参。
但是由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。
0 0
- Javascript中call(),apply(),bind()的区别
- Javascript中apply、call、bind的区别
- javascript中apply、call和bind的区别
- JavaScript中apply、call和bind的区别
- javascript中apply、call和bind的区别
- javascript中apply、call和bind的区别
- javascript中apply、call和bind的区别
- javascript中apply、call和bind的区别
- javascript中apply、call和bind的区别
- JavaScript中apply()、call()和bind()的相似与区别
- javascript中apply、call和bind的区别
- javascript中call、apply、bind区别
- javascript中call()、apply()、bind()方法的区别
- javascript中call、apply、bind方法的区别
- JavaScript之call,apply,bind方法的区别和共同点
- javascript -- apply/call/bind的区别
- JavaScript中call()、apply()和 bind()方法
- JavaScript 中apply()、call()和bind()方法的使用
- URL 和 URI 区别
- 设置PopWindow显示在某控件之上和无法获取PopWindow高度问题解决方法
- 解决 Android SDK无法下载和更新失败的问题
- 近场 远场 概念
- android studio1.01中导入library
- javascript中apply、call和bind的区别
- jquery事件的切换
- 【设计模式学习笔记七】【结构型模式】【适配器模式(Adapter)】
- android 事件总结
- Shell学习---grep
- 电话圈(Calling Circles,ACM/ICPC World Finals 1996,UVA247) ——Floyd图的传递闭包
- ORA-08103错误原理及解决方案
- 分布式缓存系统Memcached(十)——状态机之网络数据读取与解析
- Microsoft Visual Studio 2010 遇到了异常,可能是由某个扩展导致的。