繁体   English   中英

如何在Rhino中定义全局属性?

[英]How can I define a global property in rhino?

我将Rhino嵌入Java中,并且想要使用getter和setter创建一个全局属性。 此非全局属性定义适用于:

var testObj = {};
Object.defineProperty(testObj, 'testPropName', {
  set: function(value) { print('setter called w/' + value); }
});

如果我尝试使用全局“ this”对象,则会抛出错误:

Object.defineProperty(this, 'testPropName', {
  set: function(value) { print('setter called w/' + value); }
});

错误:

TypeError: Expected argument of type object, but instead had type object (#1) in  at line number 1

从Java端创建它也是可以的,但是我也没有运气。

Java方面的解决方案...

public class MyCustomBindings extends SimpleBindings {

@Override
public Object put(String name, Object value) {
  Object result = super.put(name, value);
  // "setter" logic
  return result;
}

@Override
public Object get(Object key) {
  // "getter" logic
  return super.get(key);
}

还有其他地方

ScriptEngineManager factory = new ScriptEngineManager();
engine = factory.getEngineByName("JavaScript");
MyCustomBindings bindings = new MyCustomBindings();
engine.getContext().setBindings(bindings, ScriptContext.ENGINE_SCOPE);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM