假设我想要这个 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
单个对象(第一个示例)或函数(第二个)内部。我希望能够将它们从模型 def 内部取出。其次,我想要todo.model.create
API。
有没有设计模式来实现这一点?