apply/call/bind
- 使用
apply/call/bind
改变 this 指向的
实现过程
apply
var a = {
name:'Cherry',
func1:function(){
console.log(this.name)
},
func2:function(){
setTimeout(function(){
this.func1()
}.apply(a),100)
}
}
a.func2() // Cherry
使用 call
var a = {
name:'Cherry',
func1:function(){
console.log(this.name)
},
func2:function(){
setTimeout(function(){
this.func1()
}.call(a),100)
}
}
a.func2() // Cherry
使用 bind
var a = {
name:'Cherry',
func1:function(){
console.log(this.name)
},
func2:function(){
setTimeout(function(){
this.func1()
}.bind(a)(),100)
}
}
a.func2() // Cherry
apply/call 区别
- call 收到若干个参数
- apply 接受一个包含多个参数的数组
var a = {
name:'Cherry',
fu:function(a,b){
console.log(a+b)
}
}
var b = a.fn;
b.call(a,1,2) // 3
var c = a.fn;
c.apply(a,[1,2]) // 3
bind 与 apply/call 区别
var a ={
name : "Cherry",
fn : function (a,b) {
console.log( a + b)
}
}
var b = a.fn;
b.bind(a,1,2)() // 3