服务器端的javascript - 经典的asp

时间:2010-12-09 19:05:45

标签: asp-classic javascript

在客户端javascript中,“this”运算符是窗口对象。 经典的asp服务器端javascript中的“this”运算符是什么?

在下面的代码中,在经典ASP服务器端运行时,“this”引用是什么?

test();

function test()
{
    Response.Write(typeof(this));
}

4 个答案:

答案 0 :(得分:2)

this对象似乎在服务器端asp页面的全局范围内受到特殊处理。在我的测试中,您可以将this.附加到Response等全局对象(如影子向导所怀疑):

this.Response.write("foo!");

工作正常。但是你无法反思this对象本身。尝试for(var key in this)引发了异常:

  

w3wp.exe [5868]中发生了未处理的异常('对象不支持此操作')。

为了测试this

的存在,你得到了同样的例外
if (this) { ... }

所以它根本不是一个普通的javascript对象,并且(正如Shadow Wizard所说)在全球范围内毫无用处。

答案 1 :(得分:1)

您的意思是服务器端JScript,而不是JavaScript。

在JScript中,你没有像客户端JavaScript那样的任何窗口或“全局对象”,所以除非你在对象或类中,否则“this”几乎没有意义,然后this指的是实例那个对象。

official documentation解释得非常好。

答案 2 :(得分:1)

Classic ASP JScript中的全局范围对象来自IScriptingContext asptlb.h。在Classic ASP中,此对象不可枚举。 IScriptingContext上定义的唯一对象是:

<%@ Language="Javascript"%>

<%
Response.Write(typeof this.Application + "<br>");
Response.Write(typeof this.Request + "<br>");
Response.Write(typeof this.Response + "<br>");
Response.Write(typeof this.Server + "<br>");
Response.Write(typeof this.Session + "<br>");

Response.Write(Object.prototype.toString.call(this) + "<br>");
%>

打印:

object
object
object
object
object
[object Object]

答案 3 :(得分:0)

this并不总是指向window

以下代码中的this是什么?

function Test() {
    var obj = {};
    obj.newFunc = function() { this.value = 42; }
    obj.newFunc(); // "this" is "obj"
    var obj2 = new obj.newFunc(); // Whoa, what's going on? "this" is the new object
}

在客户端JS和服务器端JS中,this仅指向已调用函数的上下文对象。