【发布时间】:2011-09-23 20:22:47
【问题描述】:
在 IronJS 中,我们有一个从 CommonObject 派生的自定义对象。我们希望拦截对对象上未定义属性的调用,并提供动态响应。 (这是必需的,因为在我们的情况下不可能预先注册所有属性。)
我们可以通过重写BoxedValue Get(string name) 函数来捕获此对象上的函数调用,并“即时”提供函数,而无需在对象上预先注册它们。
我们希望我们可以对 properties 做同样的事情,但似乎没有一个覆盖能够处理这个问题。我希望有人对 IronJS 有足够的经验来建议我们如何更好地解决这个问题。
希望这能阐明我们正在努力实现的目标:
IronJS.Hosting.CSharp.Context ctx = new IronJS.Hosting.CSharp.Context();
ctx.SetGlobal("data", new MyCustomObject());
string script = @"var x = data.mydynamicproperty;";
ctx.Execute(script);
当脚本执行时,我们希望能够覆盖并返回自定义值。例如(在 MyCustomObject 类声明上):
public override BoxedValue Get(string name) {
if (name == "mydynamicproperty") {
return BoxedValue.Box("test");
}
}
上面的覆盖是为函数调用的(例如var x = data.mydynamicfunction();),但不是为属性调用的。
任何帮助或建议将不胜感激。
【问题讨论】:
-
我也有同样的问题(在邮件列表中:groups.google.com/group/ironjs/browse_thread/thread/…),但我想用其他功能覆盖
Put。
标签: .net dynamic-language-runtime ironjs