Изучаю прототипное наследование 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
) и как её решить?
почему возникает эта ошибка
Потому что в этом месте
this.prototype.__proto__ = Object.create(Array.prototype)
this
не то, что Вы думаете.
как её решить
Использовать первый вариант кода. Изменять прототип создаваемого объекта в конструкторе, во-первых, слишком поздно (по крайней мере, для первого экземпляра этого типа), во-вторых, приводит к выполнению одного и того же кода (с одним и тем же результатом) при создании каждого нового объекта этого типа.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Приходит элемент value равный разным значениямЕсли числовые - выполняю одно действие но если value = [41 TO 80]
Есть код который прекрасно работает для тэга <a>Как применить его для тэга li?