用途
对象的属性可以是函数,一般是指向该对象,但有时候我们希望其他对象也可以调用此函数,这时候就需要使用 call
、apply
或 bind
简而言之,这三个函数的作用都是用于重定义this 对象的。
例如:下面这个实例obj.myFun()
this 指向 obj
var name='klaus',age=23;
var obj = {
name:'klaus1',
objAge:this.age,
myFun:function(){
console.log(this.name+'年龄:'+this.age)
}
}
// this 指向obj
obj.myFun() //klaus1年龄:undefined
现在有一个新的对象,我们不想重新定义myFun 函数,想直接使用obj 的 myFun,这时候就需要使用 call apply bind
来重定向 this
var newObj={
name:'newName',
age:22
}
obj.myFun.call(newObj); // newName年龄:22
obj.myFun.apply(newObj); // newName年龄:22
obj.myFun.bind(newObj)(); // newName年龄:22
bind
返回的是对应函数,所以还需要加 ()
表示立即执行,而call apply
则是立即执行此函数
带参数的函数
var obj = {
name:'klaus1',
myFun:function(from,to){
console.log(this.name+'年龄:'+this.age,'从'+from+'到'+to+'')
}
}
var newObj={
name:'newName',
age:22
}
obj.myFun.call(newObj,'上海','深圳')
obj.myFun.apply(newObj,['上海','深圳'])
obj.myFun.bind(newObj,'上海','深圳')()
//newName年龄:22 从上海到深圳
//newName年龄:22 从上海到深圳
// newName年龄:22 从上海到深圳
call 和 bind 一样,依次在对象后面将参数列出,而apply 是将参数放在一个数组中