js bind用法
JS中的bind()方法是用来改变函数运行时的this指向的,它会返回一个新的函数,在调用时这个新函数的this值会被绑定到传入的对象上,而不是原始函数的this值。这个方法可以在函数和对象的继承、类构造函数调用、使用setTimeout()函数以及消息处理等场景中非常有用。
bind()方法的用法有以下几种:
1. 绑定this值:
函数prototype
可以将一个函数绑定到一个特定的对象上,这个特定的对象就是函数运行时的this值。例如:
```
const obj = {
  name: 'John'
};
function sayHello() {
  console.log('Hello, ' + this.name);
}
const sayHelloToJohn = sayHello.bind(obj);
sayHelloToJohn(); //输出 "Hello, John"
```
当我们调用sayHelloToJohn()时,它的this值被绑定到了obj对象上,this.name实际上是指向obj.name的。
2. 传入参数:
bind()方法也可以接受参数。当原始函数被调用时,这些参数会被插入到函数参数列表的开头。例如:
```
function addNumbers(a, b) {
  console.log(a + b);
}
const addTen = addNumbers.bind(null, 10);
addTen(5); //输出15
```
这里我们将10作为实参传入了bind()方法的第一个参数中,这样我们就创建了一个新的函数addTen,它的第一个参数被绑定到了10上。当我们调用addTen时,它会将5作为插入的第二个参数传给原始函数addNumbers。
3. 继承:
bind()方法可以用来创建一个继承自另一个函数的新函数,这在JavaScript中是一种常见的技巧。例如:
```
function Animal(name) {
  this.name = name;
}
Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
};
function Dog(name, breed) {
  Animal.call(this, name);
  this.breed = breed;
}
Dog.prototype = ate(Animal.prototype);
Dog.prototype.sayBreed = function() {
  console.log('My breed is ' + this.breed);
};
const luna = new Dog('Luna', 'Golden Retriever');
const sayName = Animal.prototype.sayName.bind(luna);
console.log("Luna's name is " + luna.name); //输出"Luna's name is Luna"
sayName(); //输出"My name is Luna"
```
这里我们定义了一个Animal构造函数,它有一个实例方法sayName()。然后我们使用ate()方法创建了一个新的Dog.prototype对象,并将它的原型设置为Animal.prototype,以让Dog继承自Animal。我们还定义了一个新的方法sayBreed()。最后我们创建了一个luna实例,并将Animal.prototype.sayName方法绑定到luna对象上,然后调用该方法。
以上便是bind()方法的基本用法。需要注意的是,bind()方法一旦创建了一个新的函数,就不可以通过修改原始函数来影响这个新函数。同时,bind()方法也不支持在类似React中使用的箭头函数上。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。