Никак не могу найти ответ в Инете и разобраться что вообще происходит.
Минимальный, самодостаточный и воспроизводимый пример:
const FirstClass = class {
constructor(obj) {
this.someArray = obj.someArray;
}
}
const SecondClass = class extends FirstClass {
funcTest() {
console.log(this.someArray[0]);
}
}
const SomeClass = class {
constructor() {
this.someArray = [1, 2, 3];
this.ekz = new SecondClass(this);
}
someFunc() {
this.ekz.funcTest();
}
}
let e = new SomeClass;
e.someArray = [3, 2, 1]
console.log(e.someArray); // 3,2,1
e.someFunc(); // 1 (??????)
Проблема в том, что в e.someArray
хранится ссылка на массив.
При создании экземпляра SomeClass, в поле сохраняется ссылка на массив.
При присваивании:
e.someArray = [3, 2, 1]
ссылка в самом объекте меняется, но во внутреннем объекте ekz
ссылка осталась на старый массив.
Вариантов решения несколько:
ekz
не в конструкторе, а непосредственно в функции someFunc()
.Например:
const FirstClass = class {
constructor(obj) {
this.obj = obj;
}
get someArray() {
return this.obj.someArray;
}
}
const SecondClass = class extends FirstClass {
funcTest() {
console.log(this.someArray[0]);
}
}
const SomeClass = class {
constructor() {
this.someArray = [1, 2, 3];
this.ekz = new SecondClass(this);
}
someFunc() {
this.ekz.funcTest();
}
}
let e = new SomeClass;
e.someArray = [3, 2, 1]
console.log(e.someArray); // 3,2,1
e.someFunc(); // 1 (??????)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте, подскажите, пожалуйста, как такое можно реализовать?http://10yearsmetalloinvest
Добрый день, почему я немогу обратиться к $('body') через scrollerselement, получаю: Uncaught TypeError: Cannot read property 'element' of undefined но вот так $('body')
как сделать что бы при нажатии на div с классом test у элемента c айди test убирался класс foo если он был до этого установлен , и если нажать на элемент...