アプリを実行する例として、このAPIが必要だったとしましょう。
var db = new Database('db-name'); // DB connection
var todo = new Todo(db); // New "Todo" and pass it the DB ref
// I want this API:
todo.model.create('do this', function (data) {
console.log(data);
});
私はそれを現在次のように設定しています:
function Todo (storage) {
this.storage = storage;
};
Todo.prototype.model = {
create: function (task, callback) {
// The problem is "this" is Todo.model
// I want the "super", or Todo so I can do:
this.storage.save(task, callback);
}
}
したがって、コメントを見ると、問題はthis
「内部model.create
が明らかに参照している」ということですTodo.model
が、「」を取得するために必要super
です。
私が考えることができた最高のものは:
Todo.prototype.model = function () {
var self = this;
return {
create: function (task, callback) {
// The problem is "this" is Todo.model
// I want the "super", or Todo so I can do:
self.storage.save(task, callback);
}
}
}
しかし、これらはどちらも素晴らしいものではありません。model
最大の問題は、すべてのメソッドを単一のオブジェクト(1番目の例)または関数(2番目)の内部に配置したくないということです。モデルdefの内側からそれらを取り出せるようにしたいと思います。次に、todo.model.create
APIが必要です。
これを実現するためのデザインパターンはありますか?