在客户端javascript中,“this”运算符是窗口对象。 经典的asp服务器端javascript中的“this”运算符是什么?
在下面的代码中,在经典ASP服务器端运行时,“this”引用是什么?
test();
function test()
{
Response.Write(typeof(this));
}
答案 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
仅指向已调用函数的上下文对象。