JavaScript中的原型/类/公共属性
我有一个模型的构造函数(类似于Backbone模型),它使用一个传递给模型工厂的商店实例(例如MongoDB / Redis)。 现在在模型的构造函数里面,我做了
this.store = options.store;
当我使用var model = new Model()
构造一个实例时,Store现在可以用作this.store
。
然后我遇到了一个情况,当我的模型有“公共”的方法,例如Model.find()
这将工作,没有实例化模型。 但是现在因为没有实例化,Model内部的函数this.store
访问store。
我所做的是,我开始也增加了存储到构造函数本身Model.store = options.store
修复问题。 但是现在商店暴露给任何使用Model构造函数的东西,这是不可取的。
我猜我正在做错事。 所以我会感谢一些帮助。
如果我得到你说的正确,那么我想你想要的是允许在Model上的“静态” find()
方法而不暴露store
variables。 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
variables。