Javascript Proper Class构造函数

时间:2014-02-11 09:07:17

标签: javascript constructor

我正在尝试创建一个在其构造函数中使用一些辅助函数的类。有没有办法将这些助手移动到原型?问题是构造函数对数据库进行了一些异步调用,我需要回调函数中的应用程序,以便在检索数据后继续执行。

我想把东西移到原型上,因为如果我理解正确,这些函数不会绑定到单个对象,所以如果我有多个对象,它们仍然会调用相同的代码,但具有不同的上下文。

   Class = function(id, callback) {
    var that = this,
        addCore = function(err, model) {
            that.id = model._id
            that.core = model
            callback(err, that)
        },
        addTopology = function() {

        }

    if (arguments.length === 2) {
        gameOps.findById(id, addCore)
    } else {
        callback = id
        gameOps.create(addCore)
    }
}

Class.prototype = {
  addPlayer: function(player, callback) {
    gameOps.addPlayer(player, this.model, callback)
  }
}

1 个答案:

答案 0 :(得分:1)

  

我想把东西移到原型上,因为如果我理解正确,这些函数不会绑定到单个对象,所以如果我有多个对象,它们仍然会调用相同的代码,但具有不同的上下文。

是。但是,这不是您想要的:异步回调需要与特定实例绑定。

如果您不想在构造函数周围放置太多东西,可能会重新考虑您的设计:

function Class(model) {
    this.id = model._id;
    this.core = model;
}
Class.prototype.addPlayer = function(player, callback) {
    gameOps.addPlayer(player, this.model, callback);
};
Class.fromDatabase = function(id, callback) {
    function addCore(err, model) {
        if (err)
            callback(err);
        else
            callback(null, new Class(model))
    }
    function addTopology() {
    }

    if (arguments.length === 2) {
        gameOps.findById(id, addCore)
    } else {
        callback = id
        gameOps.create(addCore)
    }
}