Я пытаюсь создать класс, который в его конструкторе использует некоторые вспомогательные функции. Есть ли способ переместить этих помощников в прототип? Проблема заключается в том, что конструктор выполняет некоторые асинхронные вызовы в базу данных, и мне нужно, чтобы приложения выполняли функцию обратного вызова, поэтому я могу продолжить выполнение после того, как данные были восстановлены.Javascript Proper Class 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)
}
}
Это хорошо, но теперь не могу передать обратный вызов конструктора? – Pio
ОК, я вижу, это немного сложно. Поэтому я создаю класс, вызывая Class.fromDatabase, и я возвращаю свой объект в качестве второго аргумента обратного вызова? – Pio
Да, точно. Экземпляр не создается мгновенно, но доступен только для обратного вызова. Это чище, так как у вас нет неинициализированных экземпляров, плавающих вокруг, и защищает лучшее асинхронное программирование. Он также хорошо переводится в абзац Обещания. – Bergi