2010-09-13 43 views
0

有些人可能知道JScript.NET爲常見的JavaScript語言添加了不少功能......它增加了一些class語法,一些類型標識符等等等等。使用JScript 5.5而不是JScript.NET編寫應用程序

我使用JavaScript的主要原因是因爲我喜歡它是如何動態的,嵌套的函數調用,變量作用域等等......所有這些功能在.NET版本中似乎都能正常工作,但是編寫這樣的代碼給了我Type mismatch錯誤:

public class Test extends Form { 
    var btn : Button; 

    function Test() { 
     var anotherBtn = new Button; 
     anotherBtn.Text = "some text"; 

     // This is where the Type mismatch happens 
     anotherBtn.add_Click(function(sender:Object, e:System.EventArgs) { 
      Close(); 
     }); 

     this.Controls.Add(anotherBtn); 
    } 
} 

Application.Run(new Test); 

看來我不能傳遞這樣的匿名函數。如果我在課堂上的某個地方定義了add_Click回調,那麼效果很好!

我該如何避免這種情況?我想以我慣用的方式在JavaScript中編寫代碼...我能以某種方式強制​​編譯器使用舊版本的JScript嗎?

或者class內的函數不是常規的JS函數嗎?這是怎麼回事?

回答

1

不幸的是,JScript匿名函數與.NET代表不兼容。正如你所說的,類的方法不是正常的函數,因爲微軟想讓JScript類與每個.NET類兼容。在JScript.NET中做事件處理是一個問題,微軟使它變得複雜並且傾向於開發這種語言:(

所以很不幸你必須遵守微軟提供的事件處理方法,但是你可以爲這些控件可能會像你想要的那樣運行

與其他控件相比,WindowsForms控件更加困難,因爲這些其他控件需要引用委託,而這正如MSDN所聲稱的那樣,並不受JScript支持(我也無法讓它們工作)

有時設置事件處理程序的唯一方法是創建自定義的擴展類,該類會重載前一個方法調用的方法NT。

我希望你會覺得這個答案有用。

UPDATE:

您在標題中提到在JScript 5.5(或更高版本)來編寫應用程序。這是可能的,但有限的方式。它被稱爲「HTML應用程序」,它是在特殊環境中運行的網頁,它爲您提供了本地沙箱的權限:您可以管理文件,讀/寫Windows註冊表,使用外部控件甚至可以使用遊戲控制器或使用套接字進行通信通過互聯網。但它仍然是一個交互式HTML頁面。

+0

謝謝,這很有幫助。在將您標記爲已接受之前,我會等待其他一些輸入。 – 2010-09-13 14:13:54

+0

有沒有一種方法來定義委託內聯而不創建新的類方法? – 2011-05-18 07:25:46

+0

@Luca:我不認爲現在有什麼方法可以實現它。雖然你可以創建自己的類來模擬添加事件的行爲。 – pepkin88 2011-05-20 16:32:04

0

另一種可能性可能是編譯/fast-(默認值爲/fast+)。從jsc /?輸出

部分說:

      - CODE GENERATION - 
/debug[+|-]    Emit debugging information 
/fast[+|-]    Disable language features to allow better code generation 
/warnaserror[+|-]  Treat warnings as errors 
/w[arn]:<level>   Set warning level (0-4) 

這可能knobble其他一些不錯的.NET的好東西,雖然。

相關問題