Iis 在经典ASP/Javascript中将对象插入全局范围

Iis 在经典ASP/Javascript中将对象插入全局范围,iis,asp-classic,Iis,Asp Classic,这个问题与经典ASP中的Javascript有关。它与浏览器中运行的Javascript无关 设计为可重用的JS模块的典型构造如下所示: (function(globalScope) { ... declarations here... }(this)); 这允许对代码进行语法封装,以允许运行时解析器/编译器进行检查。它还提供了范围管理,因此curlies中声明的变量和函数在外部不可见 另一个典型构造是通过赋值将属于内部作用域的对象或函数“导出”到外部作用域,如下所示: (functio

这个问题与经典ASP中的Javascript有关。它与浏览器中运行的Javascript无关

设计为可重用的JS模块的典型构造如下所示:

(function(globalScope) {
   ... declarations here...
}(this));
这允许对代码进行语法封装,以允许运行时解析器/编译器进行检查。它还提供了范围管理,因此curlies中声明的变量和函数在外部不可见

另一个典型构造是通过赋值将属于内部作用域的对象或函数“导出”到外部作用域,如下所示:

(function(globalScope) {
   var data = ['Alpha', 'Beta', 'Gamma'];

   function helper(a) { .... } 

   function search(d) { .... }

   // "export" a function so it is externally visible
   globalScope.searchData = search; 

}(this));

// typeof this.searchData == "function" 
// typeof this.data == "undefined"
// typeof this.helper == "undefined"
// typeof this.search == "undefined"
这些都很典型

在经典ASP(注意:服务器端javascript!!)中使用这种构造时,JS引擎会抛出错误。我得到一个500的错误

为什么?

在经典ASP中,我可以使用作用域构造并将内容“导出”到全局范围吗


在浏览器运行时,“this”计算为“window”。在服务器端经典ASP运行时中,全局“this”的值是多少?是否可以为“this”分配新属性?

我不确定底层类型是什么,但它将是某个COM对象。除非此COM对象实现了
IDispatchEx
,否则您将无法为其分配任意属性。MSHTML中的COM对象就是这种情况,它是Internet Explorer DHTML实现的基础。但是,ASP似乎没有提供相同的功能

假设参数
globalScope
真正被期望仅为全局范围,则存在一种变通方法:

(function() { 
   var data = ['Alpha', 'Beta', 'Gamma']; 

   function helper(a) { .... }  

   function search(d) { .... } 

   // "export" a function so it is externally visible 
   searchData = search;  

})();   // Please not also small syntatic correction of your original code.
需要注意的是,属性
searchData
不得出现在范围链的任何位置。在这种情况下,JScript将在全局级别创建它

名称
searchData
确实会成为活动脚本中的命名项(即,如果在VBScript也可以看到的
searchData
的同一页面中还包含一些VBScript)。此外,
this.searchData
现在已分配。似乎无论全局对象是什么,它都允许成员名称的后期绑定解析映射到活动脚本对象本身上的命名项