bind() 方法主要用于设置函数的this值(上下文),并返回一个新的函数。这个新函数在被调用时,会以bind()方法中指定的第一个参数作为其运行时的this值。除了this之外,bind()方法还可以预设一系列参数,这些参数会在新函数调用时被使用。

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()则将所有参数作为数组传递。

推荐文档

相关文档

大家感兴趣的内容

随机列表