JavaScript中的原型/类/公共属性

时间:2013-05-08 16:59:08

标签: javascript node.js

我有一个模型的构造函数(类似于Backbone模型),它使用传递给模型工厂的商店实例(例如MongoDB / Redis)。现在在模型的构造函数中,我做

this.store = options.store; 

使用this.store构建实例后,商店现在可用var model = new Model()

然后我遇到了一种情况,当我的模型具有“公共”方法时,例如Model.find(),无需实例化模型即可运行。但现在因为它没有被实例化,Model中的函数无法通过this.store访问存储。

我做了什么,是我开始向构造函数本身Model.store = options.store添加存储来修复问题。但现在商店暴露于任何使用模型构造函数的东西,这是不可取的。

我猜我做错了什么。所以我很感激一些帮助。

1 个答案:

答案 0 :(得分:1)

如果我得到了你正确的说法,那么我认为你想要的是允许在模型上使用“静态”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变量。