Класс 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'})