bind的用法

Function.prototype.bind()

bind 方法用于将函数体内的 this 绑定到某个对象,然后返回一个新的函数。
代码示例

var square = {
    num1: 0,
    tool: function () {
      console.log(this.num1*this.num1);
  }
};
var getSquare = {num1:5};
var func = square.tool.bind(getSquare);
func();//25
square.tool();//0

这段代码中,我创建了一个求平方的对象,里面有tool的value是一个用来求平方的函数。我用 bind 方法将函数体内的 this 绑定到后面的getSquare对象上面,然后将返回的函数给 func。于是,当我调用func的时候,输出的值是25,当我直接调用 square.tool() 的时候,输出的值是0;

bind接受更多的参数,并将这些参数绑定原函数的参数

var add = function (x, y) {
  return x * this.m + y * this.n;
}

var obj = {
  m: 3,
  n: 4
};

var newAdd = add.bind(obj, 5);
newAdd(6) // 3*5+4*6=39;

在这段代码中,通过 bind 方法,我将 obj 绑定给了 this,并且我在后面加上了一个参数5,它将作为函数接受的第一参数,也就是绑定给了 x 。而返回的新的函数我赋给了newAdd。另外,我在调用newAdd函数的时候,由于还需要给一个执行参数给函数里面的 y ,这里我给了 6 。于是得到的结果就是 35+46=39。

如果bind的第一个参数是 null 或者 undefined ,this 将会被绑定到全局对象,运行 bind 方法返回的函数的 this将会指向顶层对象。

var a = 4;
function add(x, y) {
 return x+y+this.a;
}
var plus = add.bind(null, 5);
plus(10);//5+10+4 =19

这段代码中我在bind里面的this 值为 null ,所以当运行返回的 plus 函数的时候,this 指向全局对象 window.a。

你可能感兴趣的:(bind的用法)