2

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

this.store = options.store; 

一旦this.store我用var model = new Model().

然后,当我的模型具有“公共”方法时,我遇到了一种情况,例如Model.find(),无需实例化模型即可工作。但是现在因为没有被实例化,Model 内部的函数不能访问 store by this.store

我所做的是,我还开始向构造函数本身添加存储来Model.store = options.store解决问题。但是现在 store 暴露给任何使用 Model 构造函数的东西,这是不可取的。

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

4

1 回答 1

1

如果我得到你所说的正确,那么我认为你想要的是允许find()在 Model 上使用“静态”方法而不暴露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变量。

于 2013-05-08T18:24:09.373 回答