Javascript .bind () не работает в этом примере? - PullRequest
0 голосов
/ 04 марта 2019

Вот код:

var num = 0
window.onload = function() {
    var button = document.getElementById('button')
    button.onclick = function() {
        addNum.bind(this)
  }
}
function addNum() {
    num++
    this.textContent = `hit ${num} times`
}

addNum.apply(this) и addNum.call(this) оба работают.Я сбит с толку.Кто-нибудь может помочь?Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Хотя вы можете видеть эффекты addNum.call() и addNum.apply() (функция addNum() выполняется и что-то меняет на странице), addNum.bind(this) не имеет побочных эффектов.

Function.bind() не вызывает функции, используемые для ее вызова, она создает и возвращает другую функцию.Но ваш код просто игнорирует возвращаемое значение.

Ваш код должен быть примерно таким:

window.onload = function() {
    var button = document.getElementById('button')
    var boundAddNum = addNum.bind(this);
    button.onclick = function() {
        boundAddNum();
  }
}
0 голосов
/ 04 марта 2019
var num = 0;
$(function() {
var button = document.getElementById('button');
button.onclick = function() {
var addNumX  = addNum.bind(this);
addNumX();
}
var addNum = function() {
num++;
alert("OK");
this.textContent = 'hit ${num} times';
}
});
0 голосов
/ 04 марта 2019

bind создает функцию new со связанным значением this (и, возможно, аргументами).Если вы хотите выполнить функцию, вызовите ее с помощью ():

button.onclick = function() {
  addNum.bind(this)();
}

Но это довольно глупо, когда .call выполняет то же самое, не требуя дополнительных ():

button.onclick = function() {
  addNum.call(this);
}

Вызов .bind без выполнения созданной функции похож на:

button.onclick = function() {
  const someFn = () => console.log('foo');
}

Здесь вы создали функцию с именем someFn, но никогда ее не вызывали.Если вы не вызовете полученную функцию, она не будет использоваться.

...