加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 03:21:35 所属栏目:asp.Net 来源:网络整理
导读:这个问题与经典ASP中的 Javascript有关.它与在浏览器中运行的Javascript无关. 设计为可重用的JS模块的典型构造如下: (function(globalScope) { ... declarations here...}(this)); 这允许在语法上封装代码,以允许运行时解析器/编译器进行检查.它还提供范围
这个问题与经典ASP中的 Javascript有关.它与在浏览器中运行的Javascript无关.

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

(function(globalScope) {
   ... declarations here...
}(this));

这允许在语法上封装代码,以允许运行时解析器/编译器进行检查.它还提供范围管理,以便在curlies中声明的vars和函数在外部不可见.

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

(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','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现已分配.似乎无论全局对象是什么,它都允许将成员名称的后期绑定解析映射到Active Script对象本身上的命名项.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读