功能new或public static main

时间:2014-01-23 04:33:04

标签: constructor haxe

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

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

1)使用main()

//Entry point
public static main():void{
   //do something...
}

2)使用构造函数new()

//Constructor
public function new(){
   // init
}

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

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

public function new()
{
   //init
}

是否有使用指南或最佳做法?

由于

1 个答案:

答案 0 :(得分:8)

解决所有3:

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

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

      public static function main()

      正如您在示例中所做的那样,如果您希望代码在 DOM准备就绪后运行,这是一个好主意。无论是在加载时你调用另一个静态函数,还是实例化static function main() { js.Lib.window.onload = function(e) { runMyApp(); } } 并从那里运行你的应用程序,这取决于你。