В чем разница между двумя наборами кодов, я знаю, что делает функция со стрелкой, но почему традиционное выражение не работает?

#javascript #web

#javascript #веб

Вопрос:

В чем разница между двумя наборами кодов, я знаю, что делает функция со стрелкой, но почему традиционное выражение не работает?

Set — 1

перебирайте все элементы

     checkboxes.forEach( function (checkbox){
        console.log(checkbox);

        if( checkbox === this || checkbox === lastChecked)
        {
            inBetween = !inBetween;
            console.log(" start checking them inbetween");

        }

        if(inBetween)
        {
            checkbox.checked = true;
        }
    });
 

Set — 2

перебирайте все элементы

   checkboxes.forEach(checkbox => {

  console.log(checkbox);
  if (checkbox === this || checkbox === lastChecked) {
    inBetween = !inBetween;
    console.log('Starting to check them in between!');
  }

  if (inBetween) {
    checkbox.checked = true;
  }
});
 

Ответ №1:

Set — 1 — это foreach со стилем определения ES5, тогда как Set-2 — для ES6. Убедитесь, что цель / версия поддерживает ES5, чтобы Set-1 работал.

Кроме того, вы можете попробовать заменить это на self в set-1 и определить self как this перед foreach или использовать bind

   var self = this;
this.addNewObjects = function(arr){
    arr.forEach(function(obj) {
        self.addObject(new Obj(obj.prop1, obj.prop2));
    });
}
 

или

     this.addNewObjects = function(arr) {
    arr.forEach(function(obj) {
        this.addObject(new Obj(obj.prop1, obj.prop2));
    }.bind(this));
}
 

Ответ №2:

Я думаю, может быть, вы используете this в области действия forEach() функции, это один из двух разных вариантов.
более подробное объяснение: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

Комментарии:

1. Да, я думаю, что это так, поскольку это определяется тем, как вызывается функция, или нужно использовать метод bind вместе с ним, чтобы установить значение функции this независимо от того, как она вызывается