1、基本用法
可以使方法在不同的上下文中调用时,this
指向的始终是这个对象。
var person = {
name: 'Levi',
greet: function() {
console.log('Hello, ' + this.name);
}
};
var greetFunction = person.greet;
greetFunction(); // 这里通常会输出 "Hello, " 因为 this 不指向 person 对象
var boundGreetFunction = greetFunction.bind(person);
boundGreetFunction(); // 这里会输出 "Hello, Levi"
2、预设参数
bind()
方法不仅可以绑定this
,还可以预设参数。
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
var person = {
name: 'Levi'
};
var greetAlice = greet.bind(person, 'Hello');
greetAlice('!'); // 输出: "Hello, Levi!"
3、使用示例
Function.bind(obj[,param1,param2,...])
obj:这个对象将代替Function类里this对象
param1:Function的第一个参数。param2: Function的第二个参数。
返回值是个方法。
示例代码如下:
function man()
{
this.Name="man";
this.SayName=function(){
alert(this.Name);
}
}
function woman()
{
this.Name="woman";
this.SayName=function(){
alert(this.Name);
}
}
function say(word,age)
{
//只有say方法的this是man,或是woman对象才可以调用,say方法本身是没有SayName方法的。
if(this.SayName)
this.SayName();
alert(word+age);
}
var m=new man();
var w=new woman();
//通过bind调用say
say.bind(m,"abc",20)();//返回的是方法,还要在执行一下。
//用call调用
say.call(m,"abc",20);
//用apply调用
say.apply(m,["abc",20]);
4、bind()与call() 和 apply() 的区别
call()
和 apply()
在调用函数的同时立即设置this的值,而bind()
则返回一个新的函数。call()
和 apply()
的区别在于参数的传递方式:call()
需要将参数依次列出,而apply()
则将所有参数作为数组传递。