我想在 javascript 中有某种惰性初始化对象属性,因此想以某种方式重载属性读写访问,即:
var someval = myobj.lazyprop; // invokes myobj.get("lazyprop");
myobj.lazyprop = someval; // invokes myobj.set("lazyprop",someval);
其中 myobj 是我提供给脚本的某个对象。
理由:我想在应用程序中使用 Javascript (Rhino) 作为脚本引擎,脚本需要访问的数据结构可能非常庞大和复杂。所以我不想提前将它们全部包装到 javascript 对象,尤其是。因为此应用程序中的普通脚本只需要其中的一小部分。另一方面,我希望脚本尽可能简单易读,因此我不想要求在脚本中明确使用带有字符串参数的 get 或 set 方法。
请您参考如下方法:
您可以使用 Rhino 1.6R6 来做到这一点或更高 javascript getters and setters .
function Field(val){ var value = val; this.__defineGetter__("value", function(){ return value; }); this.__defineSetter__("value", function(val){ value = val; });
}
Now, if we wanted to, instead, define getters and setters within the context of our object prototype (and where having "private" data is less of a concern) we can then use an alternative object syntax for that.
function Field(val){ this.value = val;
}
Field.prototype = { get value(){ return this._value; }, set value(val){ this._value = val; }
};