javascript - Haxe JS 编译器从源代码中删除一个属性

标签 javascript class compilation attributes haxe

我有一个名为 ServerProxy 的类,其中包含三个属性。其中两个是公共(public)的(getSmiliesCompleteSignalgetMessagesCompleteSignal),第三个是私有(private)的(_url)。

当我编译我的项目时,编译器不会显示错误,甚至编译得很好(我可以在结果源中看到我的修改),但它从我的类中删除了一个属性:getMessagesCompleteSignal。以前没见过。

这是类(class):

package net;

import js.Browser;
import entity.Message.MessageData;
import haxe.Json;
import js.html.XMLHttpRequest;
import entity.Smiley.SmileyData;
import msignal.Signal;

class ServerProxy
{
    public var getSmiliesCompleteSignal:Signal1<Array<SmileyData>>;
    public var getMessagesCompleteSignal:Signal1<Array<MessageData>>;

    private var _url:String;

    public function new():Void
    {
        _url = untyped Browser.window.serverUrl;
        getSmiliesCompleteSignal = new Signal1<Array<SmileyData>>();
    }

    public function getSmilies():Void
    {
        sendRequest(ServerAction.GetSmilies, getSmiliesCompleteSignal, ServerMethod.GET);
    }

    public function getMessages():Void
    {
        sendRequest(ServerAction.GetMessages, getMessagesCompleteSignal, ServerMethod.GET);
    }

    public function sendRequest(action:ServerAction, completeSignal:Signal1<Array<Dynamic>>, method:ServerMethod, ?sentData:String):Void
    {
        var url = _url + action;
        var xhr = new XMLHttpRequest();

        xhr.onreadystatechange = function(data:Dynamic) {
            if (xhr.readyState == XMLHttpRequest.DONE) {
                completeSignal.dispatch(cast Json.parse(data.srcElement.responseText));
            }
        };

        xhr.open(cast method, url);
        xhr.send(sentData);
    }
}

@:enum
abstract ServerAction(String) {
    var GetSmilies = 'smiley/view';
    var GetMessages = 'message/view';
}

@:enum
abstract ServerMethod(String) {
    var GET = 'GET';
    var POST = 'POST';
}

这是编译后的源代码:

var net_ServerProxy = function() {
    this._url = window.serverUrl;
    this.getSmiliesCompleteSignal = new msignal_Signal1();
};
net_ServerProxy.__name__ = true;
net_ServerProxy.prototype = {
    getSmilies: function() {
        this.sendRequest("smiley/view",this.getSmiliesCompleteSignal,"GET");
    }
    ,getMessages: function() {
        this.sendRequest("message/view",this.getMessagesCompleteSignal,"GET");
    }
    ,sendRequest: function(action,completeSignal,method,sentData) {
        var url = this._url + action;
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function(data) {
            if(xhr.readyState == 4) completeSignal.dispatch(JSON.parse(data.srcElement.responseText));
        };
        xhr.open(method,url);
        xhr.send(sentData);
    }
    ,__class__: net_ServerProxy
};

如您所见,该属性消失了。当然,它会导致执行中出现 fatal error 。

最佳答案

在构造函数中,您忘记初始化属性 getMessagesCompleteSignal

public function new():Void
{
    _url = untyped Browser.window.serverUrl;
    getSmiliesCompleteSignal = new Signal1<Array<SmileyData>>();
    getMessagesCompleteSignal = new Signal1<Array<MessageData>>(); // This one
}

关于javascript - Haxe JS 编译器从源代码中删除一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156771/

相关文章:

javascript - Backbone Collection Fetch - 指向特定的 JSON 属性

c++ - 指向未由对象地址初始化的对象的指针如何为类的数据成员赋值?

build - IntelliJ编译多模块项目

java - 在 Cloud 9 上运行 Java

c - Makefile 不会在 header 修改时重建对象

go - 如何在 Go 中编译程序

javascript - 为什么工作表 ID 在重新打开文档(Excel javascript API)后发生变化?

javascript - jQuery/Javascript 替换多次出现不起作用

javascript - 如何检查变量是否具有接口(interface)的所有成员

c++ - 类列表的 vector 中的值不被修改