功能new或public static main

Alo*_*cus 2 constructor haxe

我是Haxe的新手,可能这是一个非常基本的问题,我无法真正找到答案.

我看到三种调用主类的方法:

1)使用main()

//Entry point
public static main():void{
   //do something...
}
Run Code Online (Sandbox Code Playgroud)

2)使用构造函数new()

//Constructor
public function new(){
   // init
}
Run Code Online (Sandbox Code Playgroud)

3)同时使用main()和new()

static function main()
{
    Lib.window.onload = function(e) new Main();
}

public function new()
{
   //init
}
Run Code Online (Sandbox Code Playgroud)

是否有使用指南或最佳实践?

谢谢

Jas*_*eil 8

解决所有3:

  1. static function main(){}是正确的入口点.无论哪个目标,Haxe总是在main()处开始执行.
  2. 新的() ,如果你希望你的主应用程序来执行的对象,而不是从一个静态函数,你必须明确地创建对象的构造不会自动调用:static function main() { new Main(); }
  3. 有些人喜欢将代码保存在对象中,而不是静态函数中,这是第3个示例的来源.我经常这样做,这就是你在第三个例子中展示的内容.

一些额外的要点:

  • 这里解释执行的步骤,基本摘要:
    • 所有类型/类别都已注册
    • Boot.__init() 运行特定于平台的初始化
    • static function __init__()初始化具有初始化方法的类
    • 静态变量是开始的
    • 你的main()功能被执行了
  • 如果编译一个没有-main Main参数的类,但是使用类路径/名称作为参数(例如haxe my.pack.MyClass)并且没有public static function main(),则编译该类,但不会自动运行.如果您正在创建一个库或类似的东西,这可能很有用 - 您的类在那里,但它需要由其他一些Javascript等显式调用.
  • 在Javascript中,Haxe代码一旦加载就开始运行,可能在DOM准备好之前.这就是为什么做一个好主意:

    static function main() {
      js.Lib.window.onload = function(e) { runMyApp(); }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    正如您在示例中所做的那样,如果您希望在DOM准备好之后运行代码,这是一个好主意.无论是在加载时你调用另一个静态函数,还是new MyApp()从那里实例化并运行你的应用程序,这取决于你.