Свойство объекта JavaScript возвращает неопределенное - PullRequest
0 голосов
/ 25 апреля 2018

Я уже просмотрел множество тем, много гуглил и пытался решить эту проблему самостоятельно, но не могу. Я пытаюсь решить мою проблему.

Я получаю строку, хранящуюся в локальном хранилище.

var c = localStorage.getItem('item');

Затем я передаю это значение в конструктор, чтобы присвоить это значение свойству объекта. Это класс и конструктор.

class dataSet {
    constructor ( item ) {
      this.item = item;
    }

    get item() {
      return this._item;
    }

С помощью кнопки я вызываю следующую функцию при нажатии:

function buildSet() {
    var currentSet = new dataSet( c );
    document.write(currentSet.item);
    document.write(c);
}

document.write (c) - это просто проверка, чтобы увидеть, есть ли какое-либо сохраненное значение, и да, моя строка 'test' сохранена. В результате я получаю:

undefinedTest

Я очень новичок в JavaScript, я знаю, что каким-то образом объект dataSet не получил значение и не назначил его, но у меня нет никакой идеи, как это исправить. Я буквально прочитал все существующие темы по этой теме в stackoverflow, но не смог найти решение. Спасибо, что уделили время.

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Как кто-то комментировал вам раньше, проблема здесь в том, что вы пропускаете _ в конструкторе.Но если это не решит вашу проблему, возможно, проблема связана со значением элемента в localStorage.Здесь у вас есть пример вашего кода, работающего с простой строкой:

var c = 'hello world';
class dataSet {
  constructor (item) {
    this._item = item;
  }
  get item () {
    return this._item;
  }
}
function buildSet() {
  var currentSet = new dataSet(c);
  alert(currentSet.item);
  alert(c);
}
<!DOCTYPE html>
<html>
<body>
  <button onclick="buildSet()">click me</button>
</body>
</html>
0 голосов
/ 25 апреля 2018

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

//make sure that C has a value, maybe it is undefined from here.
var c = "fakeItem";
// also lets do a test with an undefined value. 
var d;

class dataSet {
  constructor(item) {
    this._item = item;
  }

  get item() {
    //you were missing a _ here.
    return this._item;
  }
}

function buildSet() {
  var currentSet = new dataSet(c); //this works because C is defined
  var dSet = new dataSet(d); //this does not work because D is not defined
  // it works as expected!
  console.log(currentSet.item);
  document.write("currentSet.item:    " + currentSet.item);
  document.write("\n<br>");
  document.write("c:                  " + c);
  document.write("\n<br>");
  // also works as expected, it will show undefined
  console.log(dSet.item);
  document.write("dSet.item:          " + dSet.item);
  document.write("\n<br>");
  document.write("d:                  " + d);

}
<button onclick="buildSet()">SET TEST</button>
0 голосов
/ 25 апреля 2018

Ваша ошибка в конструкторе!

Вам не хватает _

Это должно быть this._item = item; вместо this.item = item;

Таким образом, ваш получатель, то есть:

get item() {
  return this._item;
}

возвращает неопределенное значение, поскольку _item свойство отсутствует ...

...