Не наследуется прототип массива js [дубликат]

137
14 декабря 2019, 08:40
This question already has an answer here:
ООП в JavaScript наследование (1 ответ)
Closed 9 месяцев назад.

Изучаю прототипное наследование js и столкнулся с проблемой.
Вот это работает:

class figure{
  constructor(){
    this.length = 0;
  }
}
figure.prototype.__proto__ = Object.create(Array.prototype);
let f = new figure();
f.push(3);
f.push(9);
console.log(f.join(','));

Поразмыслив решил перенести строку с заданием __proto__ в тело класса( инициализируя в конструкторе класса).
Перенес, и получил вот такой код:

class figure{
  constructor(){
    this.length = 0;
    this.prototype.__proto__ = Object.create(Array.prototype)
  }
}
let f = new figure();
f.push(3);
f.push(9);
console.log(f.join(','));

Но он выдает ошибку, что не может присвоить свойство __proto__ так-как оно undefine. Вопрос, почему возникает эта ошибка, как это работает ( ведь по идее __proto__ должно быть не undefine) и как её решить?

Answer 1

почему возникает эта ошибка

Потому что в этом месте

this.prototype.__proto__ = Object.create(Array.prototype)

this не то, что Вы думаете.

как её решить

Использовать первый вариант кода. Изменять прототип создаваемого объекта в конструкторе, во-первых, слишком поздно (по крайней мере, для первого экземпляра этого типа), во-вторых, приводит к выполнению одного и того же кода (с одним и тем же результатом) при создании каждого нового объекта этого типа.

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

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

Приходит элемент value равный разным значениямЕсли числовые - выполняю одно действие но если value = [41 TO 80]

141
Как применить стиль к тэгу <li> через jquery?

Как применить стиль к тэгу <li> через jquery?

Есть код который прекрасно работает для тэга <a>Как применить его для тэга li?

147
Повторный клик по ссылке

Повторный клик по ссылке

ситуация, если кликаю первый раз по ссылке(ajax пагинация)

126