作用
在js中,所有的函数再被调用的时候都会默认传入两个参数,一个是this,还有一个是arguments。在默认情况下this都是指当前的调用函数的对象。但是有时候我们需要改变this的指向,也就是说使函数可以被其他对象来调用,那么我们应该怎样做呢?这时候我们就可以使用call,apply和bind方法了。 换句话说就是改变函数体内部 this的指向;
三者相同点
作用相同,改变this的指向;
不同点
参数不同:
- call(obj,参数1,参数2,参数3,...,参数n);这里传的参数,用“,”隔开
- apply(obj,[参数1,参数2,参数3,...参数n]);这里传的是参是以数组的形式传进去的
- bind(obj,参数1,参数2,参数3,...,参数n)();传参方式和call相同,这里bind 方法后面多了个 () ,因为它返回的是一个新的函数,所以需要调用它
个人感觉如果参数之间没用什么关联用call和bind好一点,如果有一定的关联,用apply好一点,
示例
var obj ={
name:"小明",
age:18,
func:function(fm,t){
console.log("姓名:"+this.name+",年龄:"+this.age+",想从"+fm+"去"+t);
}
}
var db={
name:"菜鸟",
age:20,
}
obj.func()//姓名:小明,年龄:18想从undefined去undefined
obj.func.call(db,"上海","成都");//姓名:菜鸟,年龄:20想从上海去成都
obj.func.apply(db,["上海","成都"]);//姓名:菜鸟,年龄:20想从上海去成都
obj.func.bind(db,"上海","成都")();//姓名:菜鸟,年龄:20想从上海去成都
上面这段代码中,db想用obj里面func的方法,所以用call,apply,bind来改变func方法里的this指向,指向了db里面的name和age,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!