Я хотел бы сохранить сложное дерево объектов в виде строки, которая может работать в браузере или в узлах. Самое очевидное, что нужно использовать JSON.stringify и JSON.parse - однако я просто получаю значения строк и чисел и т. Д., Но какой объект был сохранен, не сохраняется и поэтому не может быть восстановлен. Вернее, значения восстанавливаются, но не привязываются к функциям. Каким будет правильный способ сохранения объектов, имеющих функции метода в JavaScript?Как перенести сложные объекты как строки в javascript
ответ
Вы уже можете делать то, что вы хотите с JSON.stringify()
и JSON.parse()
.
JSON.stringify()
проверяет метод .toJSON()
на объекты, которые вы передаете ему. Поэтому, если ваш объект/класс/независимо от того, что реализует этот метод, вы можете вернуть любой нужный серийный формат. Это может включать тип объекта/класса и другую информацию, необходимую для его последующего повторного инициализации.
JSON.parse()
имеет reviver function parameter, что позволяет вручную возвращать нетериализованное значение для каждого разобранного значения JSON.
Так, например, в вашем .toJSON()
вы можете вернуть объект, содержащий ваши данные, а также свойство __objType
, которое задает имя типа объекта. Затем в вашей функции reviver вы проверяете, является ли это значение объектом, и имеет ли он свойство __objType
. Если это так, то вы проверяете значение этого свойства и несериализуете его соответствующим образом (вы даже можете записать .fromJSON()
в свой объект/класс, который сделает это за вас, но в отличие от .toJSON()
, .fromJSON()
не имеет особого значения).
Если ваши функции, как правило, являются статическими методами для манипуляции/преобразования, вы должны просто повторно инициализировать классы из данных JSON.
Возможно, вам необходимо создать функцию exportToJson
и функцию importFromJson
, например.
function SomeClass(json) {
var base = this;
base.a = 'asdf';
base.b = 'fdsa';
base.export = function() {
return JSON.stringify({
a: base.a,
b: base.b
});
};
base.imports = function (js) {
base.a = js['a'];
base.b = js['b'];
};
if (typeof json !== 'undefined') {
base.imports(json);
}
}
(не самое элегантное решение, но это также StackOverflow: р)
- 1. Как создать сложные объекты javascript
- 2. Как объединить сложные объекты в javascript?
- 3. Как хранить сложные объекты в javascript?
- 4. Как объединить эти сложные объекты массива JavaScript?
- 5. Сложные объекты Javascript в JSON объектов
- 6. получить сложные объекты JavaScript вспышки
- 7. Как объединить сложные объекты JS
- 8. Как передать сложные объекты через SignalR?
- 9. Сложные объекты в Listview
- 10. Как обрабатывать сложные объекты в ReactJS?
- 11. Сложные объекты в затворах
- 12. Как связать сложные объекты в угловом2?
- 13. Как представить сложные объекты в моделях Ember?
- 14. Как просматривать сложные объекты в gdb?
- 15. Как назвать сложные объекты в JAXB/JSON?
- 16. Как сериализовать сложные объекты в symfony2
- 17. Как хранить сложные объекты в хаосе Hbase?
- 18. как разобрать сложные мыльные объекты в Android
- 19. Как перевести сложные объекты в ServiceStack?
- 20. Как перенести внутренние объекты объекта?
- 21. Как перенести эти объекты и значения из строки в iPhone?
- 22. Как вы обрабатываете сложные объекты JavaScript на клиенте?
- 23. Повторно заполнить сложные объекты javascript от JSON
- 24. Как перенести объекты в массив внутри прототипа JavaScript?
- 25. Serilog.Extras.AppSettings и сложные объекты
- 26. Как жасмин сравнивает сложные объекты и массивы
- 27. отправить сложные объекты как сообщение php java
- 28. Как связать сложные объекты с RadGrid Telerik
- 29. Как перенести непрямоугольные объекты в Pygame?
- 30. Как перенести унаследованные объекты в JSON?
В идеале вы отделяете данные от поведения и сохраняете данные как JSON и предоставляете своим классам возможность инициализировать себя из этих данных. – Tomalak
Что сказал @Tomalak; но, кроме того, какие функции привязки вы спрашиваете? – Vince
@Vince - это просто общие функции манипуляции и преобразования данных, позволяющие выполнять определенные виды операций с данными. – nwaltham