JavaScript中的Prototype / class / public属性



我有一个模型的构造函数(类似于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/

编辑:一个更新的小提琴,演示了使用闭包暴露/隐藏信息的各种方法: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变量

最新更新