2010-12-09 8 views
2

В клиентском javascript оператор «this» является объектом окна. Что такое «этот» оператор в классическом ASP-стороне на стороне сервера javascript?серверный javascript - классический asp

В следующем коде, что такое «эта» ссылка при запуске в классическом ASP-сервере?

test(); 

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

Параметр `this` оператор только` window` если функция оказывается внутри вызывается в контексте `window` (например `window.myFunction()`), который по умолчанию, если вы не предоставляете контекст. Я никогда не видел использования этого в любой хорошо написанной программе. `this` становится полезным, когда вы вызываете функцию в контексте реального объекта, например` someButton.focus() `(где` this` равно `someButton` внутри функции фокуса) – Quentin 2010-12-09 19:34:27

+1

Лучшим вопросом может быть« что является глобальным объектом области в javascript на стороне сервера asp?«Я думаю, что это то, что вы хотите знать. – 2010-12-09 20:14:34

+0

@David @Gabe он означает серверную JScript, используемую для написания классического ASP, он не связан с JavaScript на стороне клиента, кроме основного синтаксиса. – 2010-12-09 20:19:24

ответ

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

1

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

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

official documentation объясняет это довольно хорошо.

2

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

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

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

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

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

if (this) { ... } 

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

1

Глобальный объект сферы в классическом 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] 
Смежные вопросы