JavaScript Function bind()

Функциональное borrowing (Function Borrowing)

Используя метод bind(), один объект может borrowить метод у другого объекта.

В этом примере создаются 2 объекта (person и member).

Объект member borrowит метод fullname объекта person:

например

const person = {
  firstName: "Bill",
  lastName: "Gates",
  fullName: function () {
    return this.firstName + " " + this.lastName;
  }
}
const member = {
  firstName: "Hege",
  lastName: "Nilsen",
}
let fullName = person.fullName.bind(member);

попробуйте сами

сохранения this

иногда необходимо использовать метод bind() для предотвращения потери this.

В этом примере объект person имеет метод display. В методе display,this это означает объект person:

например

const person = {
  firstName: "Bill",
  lastName: "Gates",
  display: function () {
    let x = document.getElementById("demo");
    x.innerHTML = this.firstName + " " + this.lastName;
  }
}
person.display();

попробуйте сами

Когда функция используется в качестве обратного вызова,this утеряется.

Этот пример попытается показать имя через 3 секунды, но он будет показывать undefined:

например

const person = {
  firstName: "Bill",
  lastName: "Gates",
  display: function () {
    let x = document.getElementById("demo");
    x.innerHTML = this.firstName + " " + this.lastName;
  }
}
setTimeout(person.display, 3000);

попробуйте сами

Метод bind() решает эту проблему.

Метод bind() используется для привязки person.display к person.

Этот пример будет показывать имя через 3 секунды:

например

const person = {
  firstName: "Bill",
  lastName: "Gates",
  display: function () {
    let x = document.getElementById("demo");
    x.innerHTML = this.firstName + " " + this.lastName;
  }
}
let display = person.display.bind(person);
setTimeout(display, 3000);

попробуйте сами

что такое this?

в JavaScript,this ключевое слово ссылаетсяобъект.

ссылаетсякоторыйобъект зависит от способа вызова (использования или вызова).

в зависимости от способа использования, ключевое слово this ссылается на разные объекты:

  • в методах объекта:this ссылается наобъект.
  • при отдельном использовании:this ссылаетсяглобальный объект.
  • в функции:this ссылаетсяглобальный объект.
  • в функции, в строгом режиме:this является undefined.
  • в событии:this ссылается на объект, принимающий событиеэлемент.
  • методы call()、apply() и bind() могут ссылаться на this ссылается налюбой объект.

Внимание:this не переменная. Это ключевое слово. Вы не можете изменить this значение.

См. также:

Урок:JavaScript this