My Object使用javascript Object Prototypes。
我定义了以下内容:
Game = function(id, userId, tiles){
this._userId = userId;
this._tiles = tiles;
};
Game.prototype = {
get userId() {
return this._userId;
},
get tiles() {
return this._tiles;
}
}
然后我通过流星调用在服务器上创建游戏并使用返回值:
Meteor.methods({
'fetchGame': function(userId){
var future = new Future();
var url = "http://...";
Meteor.http.get(url, function(err, res){
if (err){
future.return({status: "error", error: err});
} else {
var game = new Game(userId, res.data);
future.return({status: "success", data: game});
}
});
return future.wait();
}
});
奇怪的是,我可以在方法内部调用原型函数:
console.log(game.userId)
console.log(game.tiles)
但是当对象返回时不是:
Meteor.call('fetchGame', userId, function(error, result) {
var game = result.data;
console.log(game.userId)
console.log(game.tiles)
});
game.userId
和game.tiles
都返回undefined,尽管对象被正确返回(具有_userId和_tiles的值)。
就好像原型功能在从未来回归中丢失了。
究竟可能是什么原因?
答案 0 :(得分:1)
传递给方法或从方法传递的数据将通过EJSON序列化。转换正在剥离您的原型数据实例(函数未被序列化),这将为您留下一个简单的对象。没有办法解决这个问题,但这就是它发生的原因。