我有一个模型的构造函数(类似于Backbone模型),它使用一个存储实例(例如MongoDB/Redis),它被传递给模型工厂。现在,在模型的构造函数中,我使用
this.store = options.store;
当我用var model = new Model()
构造一个实例时,Store现在作为this.store
可用。
然后,当我的模型具有"公共"方法时,我面临的情况是,例如Model.find()
,它将在不实例化模型的情况下工作。但是现在因为没有实例化,Model中的函数不能通过this.store
访问store。
我所做的是,我也开始添加存储到构造函数本身Model.store = options.store
,这解决了这个问题。但是现在store暴露给任何使用Model构造函数的东西,这是不可取的。
我猜我做错了什么。所以我希望你能帮助我。
如果我得到你说的是正确的,那么我认为你想要的是允许在模型上的"静态"find()
方法而不暴露store
变量。Javascript并没有真正为类提供正式的私有作用域,但是您可以使用闭包获得所需的功能。这是小提琴:
编辑:一个更新的小提琴,演示了使用闭包暴露/隐藏信息的各种方法:http://jsfiddle.net/52FPy/2/
简要:
var Model = function(){
var store = 'this is a store';
var Model = function(){
}
Model.find = function(){
return store;
}
return Model;
}()
这将以你想要的方式"隐藏"store
变量