javascript中的call(),apply(),bind()方法的区别
2024-08-24 09:56:10
之前一直迷惑,记不住call(),apply(),bind()的区别。不知道如何使用,一直处于懵懂的状态。直到有一天面试被问到了这三个方法的区别,所以觉得很有必要总结一下。
如果有不全面的地方,后续再进行补充。
1. 改变this的指向
var obj = {
name : '张三',
age : 17,
myFun : function () {
console.log(this.name + ' ' + this.age);
}
}
var obj2 = {
name : '李四',
age : 20
}
obj.myFun() //张三 17
obj.myFun.apply(obj2) //李四 20
obj.myFun.call(obj2) //李四 20
obj.myFun.bind(obj2)() //李四 20
由例子可以看出,apply,call,bind都对this进行了重定向,apply和call使用方法相同。但是bind后面多了个(),因为bind返回的是一个全新的函数,但是三个返回结果一致。
2. 传参情况不同
var obj = {
name : '张三',
age : 17,
myFun : function (active,fm) {
console.log(this.name + ' ' + this.age + active + fm);
}
}
var obj2 = {
name : '李四',
age : 20
}
obj.myFun.apply(obj2,['爱学习','北京']); //李四 20爱学习北京
obj.myFun.call(obj2,'爱学习','北京'); //李四 20爱学习北京
obj.myFun.bind(obj2,'爱学习','北京')(); //李四 20爱学习北京
obj.myFun.call(obj2,['爱学习','北京'])();//李四 20爱学习,北京undefined
可以发现:apply参数传递用数组,并且在方法中会自动匹配参数
call参数传递是直接放进去,每个参数之间用逗号隔开
apply如果用和call类似的传递参数的方法,则在方法中会自动匹配参数。若像apply一样传递参数,则会把整个数组 当作一个参数传递进去。
最新文章
- java面试题——集合框架
- JavaScript简单分页,兼容IE6,~3KB
- PHP中的回调函数和匿名函数
- fish药品使用说明
- Lua游戏脚本语言入门(一)
- Python疑问系列
- MongoDB 安装与启动
- WPF与混淆器
- 重写ResultSet实现分页功能(最好的分页技术)(转)
- iOS 开发 旧版 framework
- unity -- Time类(持续更新中)
- docker同时删除多个容器
- CPU、GPU、CUDA、cuDNN
- jQuery中异步问题:数据传递
- 【转】Python流程控制语句
- coreseek搜索
- RabbitMQ AMQP (高级消息队列协议)
- Internet Message Access Protocol --- IMAP协议
- mvc和mtv
- convolution-卷积神经网络
热门文章
- gattAttribute_t 含义 中文解释
- C++内存管理变革(6):通用型垃圾回收器 - ScopeAlloc
- Map的复制
- iOS UITextField的代理<;UITextFieldDelegate>;的几点笔记
- 阿里云linux服务器打开端口号
- Linux-2.6驱动程序分层分离概念
- java第一天!
- EDB*Plus的client_encoding问题
- uefi+gpt安装双系统
- 【转载】COM 组件设计与应用(九)——IDispatch 接口 for VC6.0