серверный javascript - классический asp - PullRequest
2 голосов
/ 09 декабря 2010

В клиентском javascript оператор "this" является объектом окна.Что такое оператор "this" в классическом javascript на стороне сервера asp?

В следующем коде, что означает ссылка "this" при запуске на классической стороне сервера ASP?

test();

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

Ответы [ 4 ]

2 голосов
/ 10 декабря 2010

Объект this, кажется, получает специальную обработку в глобальной области видимости страницы asp на стороне сервера.В моих тестах вы можете добавлять this. к глобальным объектам, таким как Response (как подозревал Shadow Wizard):

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

Работает нормально.Но вы не можете размышлять над самим объектом this.Попытка for(var key in this) вызвала исключение:

Произошло необработанное исключение («Объект не поддерживает это действие») в w3wp.exe [5868].

Выполучите то же исключение только для проверки существования this:

if (this) { ... }

Так что это вообще не обычный объект javascript, и (как говорит Shadow Wizard) довольно бесполезен в глобальной области видимости.

1 голос
/ 30 августа 2011

Глобальный объект области действия в классическом 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]
1 голос
/ 09 декабря 2010

Вы имеете в виду JScript на стороне сервера, а не JavaScript.

В JScript у вас нет окна или «глобального объекта», как в клиентском JavaScript, поэтому «это» в значительной степени бессмысленно, если вы не внутриобъект или класс, тогда this ссылается на экземпляр этого объекта.

Официальная документация объясняет это довольно хорошо.

0 голосов
/ 09 декабря 2010

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 указывает только на объект контекста, в котором была вызвана функция.

...