Почему метод в экземпляре моего класса javascript не может увидеть свойство - PullRequest
0 голосов
/ 16 мая 2019

Набор свойств в конструкторе класса недоступен другим функциям в этом экземпляре класса

Конструктор класса принимает объект в качестве данных в качестве аргумента. Затем он сохраняется как свойство экземпляра - все хорошо.

const form = new Form({
  "name": "John",
  "description": "a good bloke",
  "box_id": 1
});

Я вижу, что form.orginalData - это объект, переданный, однако, когда я запускаю

form.toString()

Я получаю пустой объект (устанавливается в функции с именем data)

Вот пример полностью

class Form {
  constructor(data) {
    this.orginalData = data
    for (let field in this.orginalData) {
      this[field] = data[field];
    }

  }
  data() {
    let d = {};
    for (let p in this.originalData) {
      d[p] = this[p];
    }

    return d;
  }

  toString() {
    return JSON.stringify(this.data());
  }

}
const form = new Form({
  "name": "John",
  "description": "a good bloke",
  "box_id": 1
});
let message = document.getElementById('message');

form.name = 'Ian';
form.description = 'is a wicked man';

message.innerHTML = form.name + '<br/>';
message.innerHTML += form.description + '<br/>';
message.innerHTML += "orginalData:" + JSON.stringify(form.orginalData) + '<br/>'
message.innerHTML += "<p>BUT if I run form.data() I get </p>"
message.innerHTML += form.toString();
#message {
  border: 1px solid blue;
  padding: 10px;
}

body {
  font-family: Sans-Serif;
}
<h1>
  Class property persistance
</h1>
<p>
  output:
</p>
<div id="message">
  Something went wrong
</div>

Я явно упускаю что-то довольно фундаментальное

1 Ответ

1 голос
/ 16 мая 2019

Вы получаете пустой результат, потому что originalData vs orginalData

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...