2014-01-23 67 views
2

我是哈克斯新手,可能这是一个非常基本的问题,我不能真正找到答案。功能新或公共静态主

我看到三种方式来调用主类:

1)使用的main()

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

2)使用构造函数new()

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

3)使用两个主( )和新的()

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

public function new() 
{ 
    //init 
} 

Is there一个人使用的指导方针或最佳做法?

感谢

回答

8

解决所有3:

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

几个加分:

  • 解释here东西都执行的工序,基本概括:
    • 所有类型/类被注册
    • Boot.__init()运行特定平台的初始化
    • 具有static function __init__()初始化方法的类被初始化
    • 静态变量是intiailzed如果您编译一个类没有-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(); } 
    } 
    

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

+0

关于你的第二个额外要点的评论:当你省略-main参数时,haxe编译器拒绝编译。它也拒绝编译一个没有定义静态主函数的主函数。 – xastor

+0

@xastor如果您插入类名称(包括完整的包路径),它将起作用。我会编辑我的答案以包含该内容。谢谢:) –

+0

甜! Byebye主要存根:) – xastor