0

正如你们中的一些人可能知道的那样,JScript.NET 为常见的 JavaScript 语言添加了很多功能……它添加了一些class语法、一些类型标识符等。

我使用 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 编写代码……我能以某种方式强制jsc.exe编译器使用旧版本的 JScript 吗?

或者也许 a 中的函数class不是常规的 JS 函数?这是怎么回事?

4

2 回答 2

1

不幸的是,JScript 匿名函数与 .NET 委托不兼容。正如你所说,类的方法不是普通的函数,因为微软想让 JScript 类与每个 .NET 类兼容。在 JScript.NET 中进行事件处理是一个问题,微软使它变得复杂并放弃了开发这种语言:(

所以不幸的是,您必须遵守 Microsoft 提供的事件处理方法。但是您可以为这些控件创建自定义类,其行为可以如您所愿。

使用其他控件甚至比使用 WindowsForms 控件更难,因为这些其他控件需要引用委托,正如 MSDN 声称的那样,JScript 不支持委托(我也无法使它们工作)。

有时设置事件处理程序的唯一方法是制作自定义的扩展类,该类重载事件调用的方法。

我希望你会发现这个答案很有用。

更新:

您在标题中提到使用 JScript 5.5(或更高版本)编写应用程序。这是可能的,但方式有限。它被称为“HTML 应用程序”,它是在特殊环境中运行的网页,它为您提供本地沙箱的权限:您可以管理文件,读/写 Windows 注册表,使用外部控件,您甚至可以使用游戏控制器或使用套接字进行通信通过互联网。但它仍将是一个交互式 HTML 页面。

于 2010-09-13T14:08:21.950 回答
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)

不过,这可能会影响其他一些不错的 .NET 好东西。

于 2013-04-13T09:46:38.797 回答