Сериализация/строка javascript-объекта

Я хотел бы сериализовать/упорядочить объект javascript, который можно передавать между браузерами в виде строки с помощью signalr

Часть signalr работает, так как я могу отправлять и получать сообщения чата.

Это моя простая тестовая установка

function UserObject() {
  var _firstName = 't';
  this.getFirstName = function () {
    return _firstName;
  }
  this.setFirstName = function (value) {
    _firstName = value;
  }
}

var userObject = new UserObject();
console.log(userObject.getFirstName());
userObject.setFirstName('tony');
console.log(JSON.stringify(userObject));
console.log("First Name: " + userObject.getFirstName());

Это результаты, которые я получаю.

> "t"
> "{}"
> "First Name: tony"

Почему console.log(JSON.stringify(userObject)) не работает? Когда я могу установить значение, сбросить значение и не видеть значение, когда я пытаюсь просмотреть объект.


person pithhelmet    schedule 26.01.2018    source источник
comment
Дубликат stackoverflow.com/q/13589880/1300910   -  person huysentruitw    schedule 26.01.2018


Ответы (4)


Это терпит неудачу, потому что у вас есть только частные переменные.

Вот с публичными свойствами.

function UserObject() {
  var _firstName = 't';
  this.getFirstName = function () {
    return this.firstName || _firstName;
  }
  this.setFirstName = function (value) {
    this.firstName = value;
  }
}

var userObject = new UserObject();
console.log(userObject.getFirstName());
userObject.setFirstName('tony');
console.log(JSON.stringify(userObject));
console.log("First Name: " + userObject.getFirstName());

person Joao Lopes    schedule 26.01.2018

Ваше значение хранится в _firstName, которая является локальной переменной в функции UserObject. Он не хранится в объекте, поэтому сериализация объекта не покажет его.

В вашем объекте хранятся только две функции (getFirstName, setFirstName), но JSON не может представлять функции.

Вот почему результат JSON показывает пустой объект.

person melpomene    schedule 26.01.2018

Потому что у вашего UserObject нет публичного поля для сериализации.

Вместо этого попробуйте назначить this.firstName.

person huysentruitw    schedule 26.01.2018

С этим я и пошел....

    var UserObject = {
        firstName: '',
        lastName: ''
    };
    UserObject.firstName = 'tony';
    var myObjStr = JSON.stringify(UserObject);
    console.log(myObjStr);
    var uo = JSON.parse(myObjStr);
    console.log(uo);
person pithhelmet    schedule 26.01.2018