[流星呼叫]:丢失原型信息

时间:2015-04-11 10:07:13

标签: javascript meteor

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.userIdgame.tiles都返回undefined,尽管对象被正确返回(具有_userId和_tiles的值)。

就好像原型功能在从未来回归中丢失了。

究竟可能是什么原因?

1 个答案:

答案 0 :(得分:1)

传递给方法或从方法传递的数据将通过EJSON序列化。转换正在剥离您的原型数据实例(函数未被序列化),这将为您留下一个简单的对象。没有办法解决这个问题,但这就是它发生的原因。