Haxe JS 编译器从源代码中删除了一个属性
Haxe JS compiler removes one attribute from the source
我有一个名为 ServerProxy
的 class,其中包含三个属性。其中两个是 public(getSmiliesCompleteSignal
和 getMessagesCompleteSignal
),第三个是私有的(_url
)。
当我编译我的项目时,编译器没有显示错误,它甚至编译良好(我可以在结果源中看到我的修改),但是它从我的 class 中删除了一个属性: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
};
如您所见,该属性消失了。当然,它会导致执行中出现致命错误。
在你的构造函数中你忘记初始化你的 属性 getMessagesCompleteSignal
public function new():Void
{
_url = untyped Browser.window.serverUrl;
getSmiliesCompleteSignal = new Signal1<Array<SmileyData>>();
getMessagesCompleteSignal = new Signal1<Array<MessageData>>(); // This one
}
我有一个名为 ServerProxy
的 class,其中包含三个属性。其中两个是 public(getSmiliesCompleteSignal
和 getMessagesCompleteSignal
),第三个是私有的(_url
)。
当我编译我的项目时,编译器没有显示错误,它甚至编译良好(我可以在结果源中看到我的修改),但是它从我的 class 中删除了一个属性: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
};
如您所见,该属性消失了。当然,它会导致执行中出现致命错误。
在你的构造函数中你忘记初始化你的 属性 getMessagesCompleteSignal
public function new():Void
{
_url = untyped Browser.window.serverUrl;
getSmiliesCompleteSignal = new Signal1<Array<SmileyData>>();
getMessagesCompleteSignal = new Signal1<Array<MessageData>>(); // This one
}