我正在尝试创建一个在其构造函数中使用一些辅助函数的类。有没有办法将这些助手移动到原型?问题是构造函数对数据库进行了一些异步调用,我需要回调函数中的应用程序,以便在检索数据后继续执行。
我想把东西移到原型上,因为如果我理解正确,这些函数不会绑定到单个对象,所以如果我有多个对象,它们仍然会调用相同的代码,但具有不同的上下文。
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)
}
}
答案 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)
}
}