【问题标题】:How can I define a global property in rhino?如何在 rhino 中定义全局属性?
【发布时间】:2015-09-09 17:24:01
【问题描述】:

我在 Java 中嵌入 Rhino,我想用 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 端创建它也可以,但我也没有运气。

【问题讨论】:

    标签: javascript java rhino


    【解决方案1】:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2019-07-12
      • 2023-02-13
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多