Функции не могут быть сериализованы в объект JSON.
Поэтому я предлагаю вам создать отдельный объект (или свойство внутри объекта) для фактических свойств и просто сериализовать эту часть. После этого вы можете создать объект со всеми его функциями и повторно применить все свойства, чтобы восстановить доступ к вашему рабочему объекту.
Следуя вашему примеру, это может выглядеть так:
function MyObject() { this.init(); }
MyObject.prototype = {
data: {
property1: "",
property2: ""
},
init: function () {
this.property1 = "First";
this.property2 = "Second";
},
test: function() {
alert("Executing test!");
},
save: function( id ) {
window.localStorage.setItem( id, JSON.stringify(this.data));
},
load: function( id ) {
this.data = JSON.parse( window.getItem( id ) );
}
}
Наконец-то получил ответ, предоставленный , для изменения переменной сценария из Closure в Groovy ; был настолько сосредоточен на Дженкинсе, как виновнике, что я никогда не пытался попробовать сценарий в Groovy.
Замена changeAVar на
getMetaClass().setProperty(this, "aVar", newAVar)
работает отлично.
Демонстрация:
node() {
a = load ("path/to/file")
println("Printing ${a.aVar.toString()}") //This prints "[]"
a.changeAVar("b")
println("Printing ${a.aVar.toString()}") //This prints "[b]"
a.changeAVar2("c")
println("Printing ${a.aVar.toString()}") //This prints "c"
println("Printing ${aVar}") //This fails
}
В пути / к / файлу:
import groovy.transform.Field
@Field def aVar = []
def changeAVar(newAVar){
aVar.add(newAVar)
}
def changeAVar2(newAVar){
getMetaClass().setProperty(this, "aVar", newAVar)
}
return this