它们在功能上是没有区别的,都是改变this的指向,它们的区别主要是在于方法的实现形式和参数传递上的不同
①call的用法:函数.call(对象, arg1, arg2....)
②apply的用法:函数.apply(对象,[arg1, arg2,...])
③bind的用法:var obj = 函数.bind(对象, arg1, arg2,....)
通过代码可以看出区别:
var name = 'window';
var age = '10'
function fun1(name){
console.log(name + '+' + this.name);
}
var person={
name: "people",
age: 20
};
fun1.call(person, "小明");
fun1.apply(person, ["小明"]);
//对于bind来说,用法更加的灵活
var fun2 = fun1.bind(person, "小明");
fun2();
fun1()
看一下在控制台的打印输出:
bind常见用法案例:
function fun1(myFun){
this.name = 'fun1'
myFun(this.fun3.bind(this)) // 把this指向变为fun1
}
var fun2 = function(fn){
this.name = 'fun2';
fn()
}
fun1.prototype.fun3 = function(){
console.log(this.name)
}
new fun1(fun2)
控制台输出的是: fun1
对比一下如果不使用bind方法:
function fun1(myFun){
this.name = 'fun1'
myFun(this.fun3)
}
var fun2 = function(fn){
this.name = 'fun2';
fn()
}
fun1.prototype.fun3 = function(){
console.log(this.name)
}
new fun1(fun2)
控制台输出的是: fun2