Как правильно унаследовать массив через прототипы?

В JavaScript, наследование массива через прототипы может быть достигнуто несколькими способами. Один из наиболее распространенных подходов - создание нового объекта-наследника от прототипа Array и переопределение его методов.

Вот пример, демонстрирующий этот подход:

// Создаем новый объект-наследник от прототипа Array
function CustomArray() {
  // вызываем конструктор родительского класса через функцию apply()
  Array.apply(this, arguments);
}

// Устанавливаем прототип нового объекта равным прототипу Array
CustomArray.prototype = Object.create(Array.prototype);

// Добавляем методы и свойства к прототипу нового объекта
CustomArray.prototype.customMethod = function() {
  console.log("This is a custom method.");
};

// Создаем экземпляр наследника массива
var arr = new CustomArray(1, 2, 3);

console.log(arr); // [1, 2, 3]
console.log(arr.length); // 3
arr.push(4);
console.log(arr); // [1, 2, 3, 4]
arr.customMethod(); // This is a custom method.

В этом примере мы создали новый объект CustomArray, наследуя его от прототипа Array при помощи Object.create(). Затем мы добавляем необходимые методы или свойства к прототипу CustomArray, в данном случае customMethod(). Конструктор CustomArray также вызывает конструктор родительского класса Array при помощи apply(), чтобы установить правильное значение this.

Теперь объект arr является массивом, но также имеет все добавленные нами методы и свойства. Мы можем использовать обычные операции массива, такие как push(), а также вызывать наш метод customMethod().