Pull to refresh

Comments 12

Меня всегда удивляют вот такие моменты:
Конструктор Array для объявления массивов использовать не рекомендуется.
const a = new Array() //не рекомендуется
const a = new Array(1, 2, 3) //не рекомендуется
«не рекомендуется» и всё тут, а почему непонятно. Хотя бы ссылку, почитать подробнее.

А на кой черт он нужен-то, когда для массивов уже сто лет отдельный синтаксис есть?

Т.е. ваш ответ: «У нас так принято!»
Не спорю, чем проще синтаксис, тем лучше.
Но если нужен нестандартный вариант? (ниже)
Думаю из-за того, что у конструктора Array есть перегрузка, и если передать один параметр числом, то будет создан массив с этим количеством ячеек
const a = new Array(2);
console.log(a[0]); // undefined
console.log(a.length); // 2
Если дело только в этом, то варианты вроде const e = Array(1, 2, 3), туда же, так как:
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()
Сама проблема заключена в конструкторе, просто перегрузите ее, только уже с той логикой, как Вам нужно, как вариант:
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
a[0] вместо a[1] наверное имелось в виду?
Все верно, не заметил, спасибо за поправку

Стоило бы сказать, что приведенные методы копирования массивов — только повторяют структуру массива и копируют только примитивные значения. Если какой-то элемент массива — объект, то в клонированном массиве будет ссылка на этот же объект, а не копия этого объекта.

В массиве находиться ссылка на объект, а не сам объект, по этому и копируется ссылка, так что все верно, копируется весь массив.

Так-то оно верно, но может ввести в заблуждение начинающих. Все-таки копию массива не редко делают, чтобы что-то поменять в копии, сохранив оригинал. А потом человек недоумевает, почему объект поменялся везде.

Так то оно так, но тогда уже лучше объяснить как работают сами объекты, и чем они отличаются от простых типов, а это уже тема для другой статьи, тут же описывают чисто массивы.
Sign up to leave a comment.