Изучаю прототипное наследование 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
не то, что Вы думаете.
как её решить
Использовать первый вариант кода. Изменять прототип создаваемого объекта в конструкторе, во-первых, слишком поздно (по крайней мере, для первого экземпляра этого типа), во-вторых, приводит к выполнению одного и того же кода (с одним и тем же результатом) при создании каждого нового объекта этого типа.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Приходит элемент value равный разным значениямЕсли числовые - выполняю одно действие но если value = [41 TO 80]
Есть код который прекрасно работает для тэга <a>Как применить его для тэга li?