#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 независимо от того, как она вызывается