WEB开发网
开发学院网页设计JavaScript 使用脚本实现设计和性能的平衡 阅读

使用脚本实现设计和性能的平衡

 2010-09-14 13:32:58 来源:WEB开发网   
核心提示: Invocable 接口的使用非常有趣,如您所见,使用脚本实现设计和性能的平衡(3),如果引擎实现了 Invocable 接口,则 Java 开发人员可以使用它的 InvokeFunction 方法调用之前被处理脚本中的函数,我们调用了 sayHello 方法将传递 World2 作为惟一

Invocable 接口的使用非常有趣。如您所见,如果引擎实现了 Invocable 接口,则 Java 开发人员可以使用它的 InvokeFunction 方法调用之前被处理脚本中的函数。该方法使用函数名称作为第一个参数,另一个参数是 Object 变量(varargs)的变量名称。在本例中,代码将调用 sayHello 函数和将 World 变量传递给该函数。结果,代码将通过标准输出打印出“Hello World”文本。

方法

对于面向对象的脚本语言,可以使用相同的接口调用处理脚本所创建的对象的方法。为演示此特性,我将创建一个适当的脚本(位于 method.js 文件中):

function Hello() {}
Hello.prototype.sayHello = function(value) {
    with (this) println("Hello " + value);
}
var hello = new Hello();
hello.sayHello("World1");

该脚本将创建一个含有 sayHello 原型函数的 Hello 类。然后,它将实例化一个 hello 变量并调用它的方法。结果,这个脚本将通过标准输出打印“Hello World1”文本。

接下来,我们看看以下这段 Java 代码。

package net.scriptinginjava.invocable;
import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class MethodTest {
  public static void main(String[] args) throws Exception {
   ScriptEngineManager factory = new ScriptEngineManager();
   ScriptEngine engine = factory.getEngineByName("js");
   if (engine instanceof Invocable) {
    engine
     .eval(new FileReader(
      "src/net/scriptinginjava/invocable/method.js"));
    ((Invocable) engine).invokeMethod(engine
     .get("hello"), "sayHello", "World2");
   }
  }
}

同样,此示例与之前处理脚本并执行脚本中定义的函数的 Java 程序极为相似。惟一区别就是这个示例使用 invokeMethod 方法调用对象方法。请回想我们在本例中所使用的脚本:它将实例化一个 hello 对象。这样,我们便可以使用 engine.get("hello") 语句通过引擎的上下文获取该对象。这正是传递给 invokeMethod 方法的第一个参数;该对象定义在我们希望调用的一个处理脚本中。其他参数与 invokeFunction 方法相同:方法名称和对象变量编号将作为参数传递给该方法。在本例中,我们调用了 sayHello 方法将传递 World2 作为惟一的参数。由于 sayHello 方法被调用了两次(脚本调用了一次,Java 应用程序调用了一次),因此应用程序将通过标准输出打印以下内容:

上一页  1 2 3 4 5 6 7  下一页

Tags:使用 脚本 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接