Комментарии 12
Меня всегда удивляют вот такие моменты:
Конструктор Array для объявления массивов использовать не рекомендуется.«не рекомендуется» и всё тут, а почему непонятно. Хотя бы ссылку, почитать подробнее.
const a = new Array() //не рекомендуется const a = new Array(1, 2, 3) //не рекомендуется
0
А на кой черт он нужен-то, когда для массивов уже сто лет отдельный синтаксис есть?
-1
Думаю из-за того, что у конструктора Array есть перегрузка, и если передать один параметр числом, то будет создан массив с этим количеством ячеек
const a = new Array(2);
console.log(a[0]); // undefined
console.log(a.length); // 2
+1
Если дело только в этом, то варианты вроде const e = Array(1, 2, 3), туда же, так как:
Но, вообще ситуация такая, необходимы несколько массивов, но с дополнительными одинаковыми методами. Писать в Array.prototype не то. Очень удобно получается с наследованием:
const a = Array(6)
console.log(a) // [empty × 6]
const b = Array('6')
console.log(b) // ["6"]
Но, вообще ситуация такая, необходимы несколько массивов, но с дополнительными одинаковыми методами. Писать в Array.prototype не то. Очень удобно получается с наследованием:
class MyArray extends Array {
myMethod1() {}
myMethod2() {}
}
const a = new MyArray(1, 2, 3)
a.myMethod1()
a.myMethod2()
0
Сама проблема заключена в конструкторе, просто перегрузите ее, только уже с той логикой, как Вам нужно, как вариант:
class MyArray extends Array {
myMethod1() {}
myMethod2() {}
constructor() {
super(arguments.length);
for (var i = 0; i !== arguments.length; i++) {
this[i] = arguments[i];
}
}
}
const a = new MyArray(2);
consle.log(a[1]); // 2
+1
Стоило бы сказать, что приведенные методы копирования массивов — только повторяют структуру массива и копируют только примитивные значения. Если какой-то элемент массива — объект, то в клонированном массиве будет ссылка на этот же объект, а не копия этого объекта.
-2
В массиве находиться ссылка на объект, а не сам объект, по этому и копируется ссылка, так что все верно, копируется весь массив.
0
Так-то оно верно, но может ввести в заблуждение начинающих. Все-таки копию массива не редко делают, чтобы что-то поменять в копии, сохранив оригинал. А потом человек недоумевает, почему объект поменялся везде.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Руководство по JavaScript, часть 5: массивы и циклы