Написание приложений на JScript 5.5 вместо JScript.NET

Как некоторые из вас могут знать, 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?

Или, может быть, функции внутри class не являются обычными функциями JS? В чем дело?

2 ответа

Решение

К сожалению, анонимные функции JScript не совместимы с делегатами.NET. Как вы сказали, методы класса не являются обычными функциями, потому что Microsoft хотела, чтобы классы JScript были совместимы с каждым классом.NET. Обработка событий в JScript.NET является проблемой, Microsoft усложнила разработку и отказалась от разработки этого языка:(

Так что, к сожалению, вы должны соблюдать методы обработки событий, данные Microsoft. Но вы могли бы создать собственные классы для этих элементов управления, которые могли бы вести себя так, как вам хотелось бы.

С другими элементами управления это даже сложнее, чем с элементами управления WindowsForms, потому что эти другие элементы управления требуют ссылки на делегат, который, как утверждает MSDN, не поддерживается JScript (я также не мог заставить их работать).

Иногда единственный способ установить обработчик события - создать пользовательский расширяемый класс, который перегружает метод, вызываемый событием.

Я надеюсь, что вы найдете этот ответ полезным.

ОБНОВИТЬ:

Вы упомянули в заголовке для написания приложений в JScript 5.5 (или более поздней версии). Это возможно, но ограниченным образом. Он называется "Приложение HTML", это веб-страница, запускаемая в специальной среде, которая предоставляет вам разрешения локальной песочницы: вы можете управлять файлами, читать / записывать в реестр Windows, с помощью внешнего управления вы можете даже использовать игровые контроллеры или использовать сокеты для связи. по интернету. Но все равно это будет интерактивная HTML-страница.

Другая возможность, возможно, будет заключаться в /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.

Другие вопросы по тегам