Как расширить стандартные методы типов в ES5?

Решил я сделать свой тип данных, customArray, который наследуют Array и расширяет его функционал.
В es6 выглядит примерно так (вот фидл):
class customArray extends Array {
    constructor(arr) {
    	super(arr);
    	this.arr = arr;
    }
    
    get count() {
        return this.arr.reduce((acc, n) => acc + n);
    }
}

let arr = new customArray([1, 2, 3, 4]);


Но когда Babel все это дело транспилирует, то ничего не работает. Это вообще возможно написать без es6?
Решение
class customArray {
    constructor(arr) {
    	this.arr = arr;
    }
    
    get count() {
        return this.arr.reduce((acc, n) => acc + n);
    }
}

let arr = new customArray([1, 2, 3, 4]);

  • Вопрос задан
  • 213 просмотров
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Не понятно, зачем вы наследуетесь от Array, если имеете в классе отдельный arr из конструктора?
По теме, почитайте главу 40 из книги "Сила JavaScript. 68 способов эффективного использования JS". Там объясняется, почему не стоит наследоваться от встроенных классов. Коротко: свойство length не будет работать как ожидается, а остальные методы и свойства лучше делегировать (что вы и делаете, если игнорировать в вашем коде наследование).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы