Класс ES6 не распознается как функция

Я пытаюсь использовать методы получения и установки для корректировки данных, изначально установленных с помощью конструктора классов. Кажется, работает геттер:

class myClass {
  constructor(sth) {
    this.data = {
      sth,
      timestamp: new Date()
    }
  }

  create(createData) {
    const newData = Object.assign({}, this.theData, {
    /*      this getter seems to work ^^^^^^^^^^^^ */
      createData
    })
    console.log(newData) // looks good
    // set'ter new data
    this.theData(newData)
    return this
  }

  get theData() {
    return this.data
  }

  set theData(newData) {
    console.log('setting')
    this.data = newData;
  }
}

const Instance = new myClass('construct data')
  .create({createData: 'some data'})

Но это получает ошибку

zakeyumidu.js:27 Uncaught TypeError: this.theData не является функцией

на myClass.create

создавая неsetter Метод, кажется, работает, как я могу просто сделать

setTheData(newData) {
  this.data = newData // yep, that works
}

Но я понимаю, что getters/setters являются предпочтительными.

Можно ли устанавливать такие данные экземпляра внутри методов класса, как мой пример, который работает? Если нет, то почему мой сеттер не работает?

2 ответа

Решение

this.theData(newData) будет доступ theDataдобытчик. поскольку .data не является функцией во время выполнения (или когда-либо) строки, поэтому вы получаете эту ошибку.

Чтобы решить проблему, вы должны использовать установщик:

this.theData = newData;

Вместо this.theData(newData) ты должен написать this.theData = newData

class myClass {
  constructor(sth) {
    this.data = {
      sth,
      timestamp: new Date()
    }
  }

  create(createData) {
    const newData = Object.assign({}, this.theData, {
    /*      this getter seems to work ^^^^^^^^^^^^ */
      createData
    })
    console.log(newData) // looks good
    // set'ter new data
    this.theData = newData;
    return this
  }

  get theData() {
    return this.data
  }

  set theData(newData) {
    console.log('setting')
    this.data = newData;
  }
}

const Instance = new myClass('construct data')
  .create({createData: 'some data'})

Другие вопросы по тегам