2011-03-24 67 views
4

相似:Inserting objects into global scope in classic ASP/Javascript在經典asp中使用服務器端JavaScript:「this」有什麼問題?


試圖開始使用在傳統的ASP使用JavaScript。似乎是這樣的一些「陷阱」:任何有這方面經驗的人都可以告訴我「Blah2」代碼是怎麼回事?好像它「應該」的工作,但似乎與我用「這個」 ...

<script language="javascript" runat="server"> 

var Blah = {}; 
Blah.w = function(s){Response.write(s);} 

Blah.w('hello'); //this works... 


var Blah2 = function(){ 
    this.w = function(s){Response.write(s);} 
    //line above gives 'Object doesn't support this property or method' 
    return this; 
}(); 

Blah2.w('hello'); 

</script> 

感謝任何指針

+1

@Sebastian:經典ASP允許您使用VBScript或JavaScript的在服務器端。 – 2011-03-24 01:13:12

+1

你可能會意識到這一點,但不管信不信,有些人不會 - 「經典」ASP不應該被使用,除非你別無選擇。 – 2011-03-24 01:13:51

+0

@John:是的,我知道現在我應該用asp.net加快速度(畢竟,至少現在已經有10年了)。然而,我對傳統的ASP非常熟悉,有一個快速推出的項目,並且認爲我至少會嘗試從服務器端vbscript切換到j(ava)腳本來學習新的東西(舊?刷上一點JSON。 – 2011-03-24 04:34:24

回答

2

你需要在你的功能括號中的問題

var Blah2 = (function(){ 
    this.w = function(s){Response.write(s);} 
    //line above gives 'Object doesn't support this property or method' 
    return this; 
}()); 

此外,this.w沒有做你想做的。 this實際上指向那裏的全局對象。你想:

var Blah2 = (function(){ 
    return {w : function(s){ Response.write(s); }}; 
}()); 

或者

bar Blah2 = new (function(){ 
    ... 
+0

其他人請跳進來糾正我,如果我錯了,但我很漂亮在我使用它的上下文中確定「this」是指函數Blah2,而不是全局對象......至少,它是如何在瀏覽器中工作的:我不清楚的是它爲什麼不起作用這個背景。除非你在服務器端ASP中專門說*,它可以像你描述的那樣工作嗎? – 2011-03-24 04:40:44

+0

不,除非你用'new'創建一個對象。如果你不相信我,可以在任何瀏覽器中運行它:'function blah(){alert(this === window); } blah()'。函數調用本身不具有'this'集合。 – 2011-03-24 04:42:47

+0

我應該補充說明你的第二個例子(類似於我的第一個例子)*做*工作。我真的只是想知道爲什麼「這個」在這方面似乎是一個問題。 – 2011-03-24 04:44:32