2016-08-16 4 views
1

Я пытаюсь перевести следующее в ES5, в то время как изучение языка:Возникли проблемы перевода этого ES6 к ES5 включая распространение синтаксис

const transitionendFn =()=> { 
    [...this.slider].forEach((el)=> el.className = 'item'); 
    selectedEl.classList.add('active'); 
    this.isAnimating = false 
} 

ES5:

const transitionendFn = function() { 
    [].concat(this.slider). 
     forEach(function (el) { 
      return el.className = 'item'; 
     }); 
    selectedEl.classList.add('active'); 
    this.isAnimating = false 
} 

Я не понимаю, распространение часть.

this.slider содержит следующее:

enter image description here

Любая помощь исправляя этот код ценится.

Я получаю «TypeError: el не определено» с моим переводом.

+0

'[... this.slider] .forEach' можно перевести как' Array.prototype.forEach.call (this.slider, .. . '' [... foo] 'idiom - это способ преобразования объекта, подобного массиву, или итерации в массив. –

+0

' [... this.slider] 'равнозначно' Array.from (это .slider) '.' this.slider' должен быть преобразован в массив, потому что он итерируется здесь (который может быть или не быть массивом). – estus

+0

ES5 не имеет 'const'. – Oriol

ответ

3

Имейте в виду, что:

  • функции стрелки не имеют this связывания. Традиционные функции (единственный вид, доступный в ES5), поэтому вам придется привязать его к желаемому значению.
  • ES5 не имеет const переменных. Только var единиц.
  • ES5 не имеет итерируемых объектов. Предполагаю, что this.slider является массивным.

Тогда перевод будет что-то вроде

var transitionendFn = function() { 
    [].forEach.call(this.slider, function(el) { 
    return el.className = 'item'; 
    }); 
    selectedEl.classList.add('active'); 
    this.isAnimating = false; 
}.bind(this); 
+0

Th ank you @Oriol и все, кто участвовал, я читал все предложения, так много информации, чтобы учиться так быстро. Это сработало. – FerchoCarcho