Итак, у меня есть объект javascript, к которому я подключил несколько методов через прототип.Как деперсировать объект JSON обратно в объект со связанными методами?
Не беспокойтесь.
Теперь, когда я сохраняю этот объект в JSON, сохраняются только фактические значения свойств. Это имеет смысл. Как бы вы упорствовали в методах, так или иначе?
Но, когда я отменяю объект JSON, я, конечно же, заканчиваю тем, что выглядит, как свойство, как мой первоначальный объект, который уже не имеет никаких связанных с ним методов.
я понимаю + почему + это бывает.
Мой вопрос: есть ли какой-нибудь шаблон для обработки этой ситуации?
С моей стороны, я открыл небольшую библиотеку js под названием Classy classes for JS, что позволяет вам делать что-то вроде этого.
var MyClass = Class.$extend({
__init__ : function() { alert('called'); },
toString() : function() {
return this.value;
})
});
var obj = MyClass.$withData({value: 42});
alert(obj.toString());
Это + делает + работу, но я не могу видеть, как легко применить его к глубокой иерархии объектов.
EDIT: Первоначально я был не очень ясен. Я знаю, что Classy (и собственно jquery, как мне только что известно) может применять данные к конкретному объекту для смешивания прототипированных методов, но реальный вопрос заключается в том, как сделать это для более глубокой иерархии объектов.
Я экспериментировал с этим, но не похоже, что какие-либо прототипные методы добавляются в эти подобъекты, и, честно говоря, я не вижу, как они могут быть, без какого-либо кода где-то исполняющего на "$ .extend (obj, yourDataFromJSON);" на каждом объекте, поскольку иерархия находится в обратном порядке. Думаю, все в порядке. Я знаю, что js не похож на ваши традиционные классы, ориентированные на языки. Мне просто интересно, существует ли уже общая картина для решения чего-то подобного. – DarinH
withData: * Создает новый экземпляр класса путем обхода конструктора и назначения атрибутов из данного объекта. Это полезно, если вы хотите присоединить методы к объекту, полученному от объекта JSON * - поэтому у объекта * есть * методы вашего класса. – ThiefMaster
Да, Withdata, вероятно, лучший способ пойти. Я столкнулся с некоторыми проблемами с Classy, JQMobile и Knockout, хотя JQ-расширение, похоже, работает последовательно со всеми этими библиотеками. – DarinH