2017-07-03 7 views
5

私のhaxeプロジェクトでは、javascriptをターゲットにして、@:exposeを使用してクラスを公開して、haxeプロジェクト外から呼び出すようにしました。Firefoxで静的プロパティが表示されない

私のMainクラスでは、instanceを使用してシングルトーンクラスにアクセスしています。以下のような

com.Main.instance

、私はクラス内の関数iniにアクセスしようとすると、それはChromeを使用している場合にのみ動作しますが、それは、Firefoxでエラーが発生します。

TypeError: com.Main.instance is undefined

なぜChromeで動作していますが、Firefoxでは動作していないのでしょうか?私はhaXeのバージョン3.4.0

を更新しました、私はここで問題

package com; 

import js.Browser; 
@:expose 
class Main { 
    /* 
    Using this var results in undefined 
    example at Firefox console: 
    >> com.Main.instance 
    undefined 
    */   
    @isVar public static var instance(get, null):Main = null; 

    static function get_instance():Main { 
     if (instance == null) 
      instance = new Main(); 
     return instance; 
    } 

    function new() { 
    } 
    static function main() { 
     trace('Hello World'); 
    } 
    /* 
    Calling this method results in error 
    example at Firefox console: 
    >> com.Main.instance.init(); 
    TypeError: com.Main.instance is undefined 
    */ 
    public function init(){ 
     Browser.console.log("Main Initialized"); 
    } 
} 

を再現するために、最小化haXeのサンプルファイルを追加を使用しています

は、HTMLページです:

<!DOCTYPE html> 
<html> 
<head> 
    <script 
    src="https://code.jquery.com/jquery-3.2.1.min.js" 
    integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" 
    crossorigin="anonymous"></script> 

    <script type="text/javascript" src="map.js"></script> 
</head> 


<body > 

    <script> 


$(document).ready(function() { 
    com.Main.instance.init(); 
}); 

     </script> 




</body> 
</html> 

そして、ここにコンパイルされたmap.jsがあります:

// Generated by Haxe 3.4.0 
(function ($hx_exports) { "use strict"; 
$hx_exports["com"] = $hx_exports["com"] || {}; 
var com_Main = $hx_exports["com"]["Main"] = function() { 
}; 
com_Main.get_instance = function() { 
    if(com_Main.instance == null) { 
     com_Main.instance = new com_Main(); 
    } 
    return com_Main.instance; 
}; 
com_Main.main = function() { 
    console.log("Hello World"); 
}; 
com_Main.init = function() { 
    window.console.log("Main Initialized"); 
}; 
com_Main.__meta__ = { statics : { instance : { isVar : null}}}; 
com_Main.main(); 
})(typeof exports != "undefined" ? exports : typeof window != "undefined" ? window : typeof self != "undefined" ? self : this); 

//# sourceMappingURL=map.js.map 
+2

コンパイル済みのjsとソース(またはこの問題を再現する単純化されたバージョン)を貼り付けると、誰かがデバッグに役立つかもしれません。文脈がなければ、何が壊れているのかを知ることは不可能です。 – Chii

答えて

1

外部JSコードのHaxeプロパティの使用は、私が知る限り、実際にはサポートされていません(#2469を参照)。

ゲッターを直接呼び出すことができます(例:com.Main.get_instance().init())。その他の解決方法については、その問題を確認してください。


注:私は例がクロム(59または60)で動作することを確認できなかったと、本当に、私はそれができるとは思いません。

関連する問題