如何引用另一个JScript文件?

Tho*_*sen 11 javascript wsh include

我正在使用JScript和WSH编写一些服务器端脚本.脚本变得越来越长,一些常见的函数和变量更适合我在各种脚本实例中包含的通用库脚本.

但是,我找不到从另一个JScript文件引用一个JScript文件的方法.有一会儿,我虽然阅读文件内容并传递给它eval()可以工作.但是,正如它在MSDN上所说:

请注意,封闭程序看不到eval语句中定义的新变量或类型.

有没有办法从另一个包含/引用JScript文件?

mae*_*ics 10

尝试使用Windows脚本文件.它基本上是一个XML文档,允许您包含多个脚本文件并定义多个作业等.

<!-- MyJob.wsf -->
<job id="IncludeExample">
  <script language="JScript" src="MyLib1.js"/>
  <script language="JScript" src="MyLib2.js"/>
  <script language="JScript">
    WScript.Echo(myLib1.foo());
    WScript.Echo(myLib2.bar());
  </script>
</job>
Run Code Online (Sandbox Code Playgroud)


Cau*_*ite 9

基于Thomas的解决方案 - 这是一种类似但更模块化的方法.首先,要调用的脚本:

/* include.js */
(function () {
    var L = {/* library interface */};
    L.hello = function () {return "greetings!";};
    return L;
}).call();
Run Code Online (Sandbox Code Playgroud)

然后,在调用脚本中:

var Fs = new ActiveXObject("Scripting.FileSystemObject");
var Lib = eval(Fs.OpenTextFile("include.js", 1).ReadAll());
WScript.echo(Lib.hello()); /* greetings! */
Run Code Online (Sandbox Code Playgroud)

以这种方式定义的库不会产生或依赖任何upvalues,但是eval它将返回它从库中的周围匿名函数接收的任何值.


Tho*_*sen 8

好的,我找到了一个不错的解决方案

// A object to which library functions can be attached
var library = new Object;
eval((new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile("common_script_logic.js", 1).ReadAll());

// Test use of the library
library.die("Testing library");
Run Code Online (Sandbox Code Playgroud)

我创建了一个可以附加库函数的对象.这样,我可以从调用脚本到达我的库中定义的代码.不完美,但完全可以接受.

很高兴看到更合适的解决方案:-)