我有一个模型的构造函数(类似于Backbone模型),它使用传递给模型工厂的商店实例(例如MongoDB / Redis)。现在在模型的构造函数中,我做
this.store = options.store;
使用this.store
构建实例后,商店现在可用var model = new Model()
。
然后我遇到了一种情况,当我的模型具有“公共”方法时,例如Model.find()
,无需实例化模型即可运行。但现在因为它没有被实例化,Model中的函数无法通过this.store
访问存储。
我做了什么,是我开始向构造函数本身Model.store = options.store
添加存储来修复问题。但现在商店暴露于任何使用模型构造函数的东西,这是不可取的。
我猜我做错了什么。所以我很感激一些帮助。
答案 0 :(得分:1)
如果我得到了你正确的说法,那么我认为你想要的是允许在模型上使用“静态”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
变量。