在客户端JavaScript中,“this”运算符是窗口对象。 经典的asp服务器端JavaScript中的“this”运算符是什么?服务器端javascript - 经典asp
在下面的代码中,在传统的ASP服务器端运行时,“this”引用是什么?
test();
function test()
{
Response.Write(typeof(this));
}
在客户端JavaScript中,“this”运算符是窗口对象。 经典的asp服务器端JavaScript中的“this”运算符是什么?服务器端javascript - 经典asp
在下面的代码中,在传统的ASP服务器端运行时,“this”引用是什么?
test();
function test()
{
Response.Write(typeof(this));
}
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
仅指向在一个函数已被调用的上下文对象。
你的意思是服务器端的JScript,而不是JavaScript。
在JScript中,您没有任何窗口或客户端JavaScript中的“全局对象”,因此“this”几乎没有意义,除非您在对象或类中,否则this
引用该对象的实例。
official documentation解释得很好。
this
对象似乎在服务器端asp页面的全局范围内受到特殊处理。在我的测试中,可以追加this.
全局对象像Response
(暗影精灵怀疑):
this.Response.write("foo!");
工作正常。但是你不能反思this
对象本身。试图for(var key in this)
抛出异常:
未处理的异常(“对象不支持此操作”)中的w3wp.exe [5868]发生。
你得到同样的异常只是用于测试的this
存在:
if (this) { ... }
因此,这不是一个正常的JavaScript对象可言的,(如阴影向导说)是全球没什么用范围。
Classic ASP JScript中的全局范围对象是IScriptingContext,从asptlb.h。在传统的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]
的`this`操作者仅`window`如果内出现的函数被调用window`的`上下文(例如`window.myFunction()`),如果你不提供上下文,默认情况下它是默认的。我从来没有在任何写得好的程序中看到过这种用法。当你在一个实际对象的上下文中调用一个函数时,这个函数会变得很有用,例如`someButton.focus()`(其中`this`等于`someButton`内的焦点函数) – Quentin 2010-12-09 19:34:27
更好的问题可能是“什么是asp服务器端javascript中的全局作用域对象吗?“我认为这就是你想知道的。 – 2010-12-09 20:14:34
@David @Gabe他的意思是服务器端的JScript用于编写经典的ASP,除了基本的语法外,它与客户端的JavaScript没有任何关系.. – 2010-12-09 20:19:24