Как редактировать значения объекта внутри массива внутри класса в JavaScript? - PullRequest
0 голосов
/ 04 августа 2020

Если у меня есть класс с конструктором, а в конструкторе - массив с объектами, и я хочу, чтобы метод объекта редактировал значения объектов, это становится немного беспорядочным. m стремится к:

class SomeClass {
  constructor() {
    this.o = [
      {
        name: "John",
        changeName: () => {
          this.name = "Mike";
        },
      },
    ];
  }
}

SomeClass.o[0].changeName();

Но это не работает, потому что this относится к классу, а не к объекту.

1 Ответ

1 голос
/ 04 августа 2020

Прежде всего, вам нужно создать экземпляр с new, если вы хотите, чтобы конструктор запускался.

Не используйте стрелочные функции, если вы хотите, чтобы this ссылался на объект, который вы вызвали метод на.

Так поправьте вот так:

class SomeClass {
  constructor() {
    this.o = [
      {
        name: "John",
        changeName() { // not an arrow function
          this.name = "Mike";
        },
      },
    ];
  }
}

let obj = new SomeClass(); // use `new`

obj.o[0].changeName();

console.log(obj.o[0].name);
...