#javascript #json
Вопрос:
Мне нужно сохранить JSON в переменной. У меня есть следующая функция:
retrieve(){
JSON.parse(localStorage.getItem('todos'));
}
И я пытаюсь сохранить возврат функции в переменной.
this.todos = this.retrieve()
Но я получаю:
model.js:5 Неучтенная ошибка типа: Не удается прочитать свойство «извлечь» неопределенного
Если я сделаю это вместо этого, это сработает:
this.todos = JSON.parse(localStorage.getItem('todos'));
Почему это происходит?
Изменить: Полный код
export default class Model {
constructor(){
this.view = null;
this.todos = this.retrieve();
if(!this.todos || this.todos.length < 1){
this.todos = [
{
id: 0,
title: 'default',
description: 'default',
completed: false,
}
]
this.id = 1;
}
this.id = this.todos[this.todos.length - 1].id 1;
retrieve(){
return JSON.parse(localStorage.getItem('todos'));
}
}
Спасибо всем.
Комментарии:
1. вам нужно
return
что-то из функции, если вы хотите, чтобы она что-то возвращала2. @JaromandaX На самом деле я пытался вернуться, но результат был тот же, поэтому я просто пытался без возврата и другими способами.
3. Это зависит от того, где вы это выполняете
this.todos = this.retrieve()
? Мое быть внутри обычной функции вместо функции со стрелкой.4. @RajdeepDebnath retrieve () — это метод класса. это.todos находится в конструкторе класса.
5.
retrieve()
не должно быть в конструкторе, вы хотите, чтобы он был методом класса
Ответ №1:
Ваши методы уровня класса должны находиться вне конструктора.
localStorage.setItem('todos', JSON.stringify([{id:1},{id:2},{id:3}]))
class Model {
constructor(){
this.view = null;
this.todos = this.retrieve();
if(!this.todos || this.todos.length < 1){
this.todos = [
{
id: 0,
title: 'default',
description: 'default',
completed: false,
}
]
this.id = 1;
}
this.id = this.todos[this.todos.length - 1].id 1;
}
retrieve(){
return JSON.parse(localStorage.getItem('todos'));
}
}
console.log(new Model());