Call,Apply,Bind的使用与区别 ,如何实现一个bind?
Call,Apply,Bind的使用与区别
-
相同点:
- 都是使用与方法借用以及明确this指向场景
- 第一个参数都是this要指向的对象
- 都可以利用后面参数进行传参
-
不同点
- 参数传递方式不同
- call apply是立即调用 bind是动态调用
基本使用
Array.prototype.slice.call(obj,0,1,2)
Array.prototype.slice.apply(obj,[0,1,2])
Array.prototype.slice.bind(obj)(0,1,2)
bind返回一个函数
实现一个bind
// 实现作用域绑定
Function.property.bind = function(context){
const _this = this
return function(){
_this.apply(context,Array.prototype.slice.call(arguments))
}
}
// 实现动态参数
Function.property.bind = function(context){
const _this = this
const args = Array.prototype.slice.apply(arguments,[1])
return function(){
_this.apply(context,args.concat(Array.prototype.slice.call(arguments)))
}
}
学习自 – JS每日一题