Prototype / class / public attributes in JavaScript

I have a constructor for a model (similar to Backbone model) which uses an instance of a store (e.g. MongoDB / Redis) which is passed to the model factory. Now inside the constructor for the model, I do

this.store = options.store; 

Store is now available as this.store once I construct an instance with var model = new Model().

Then I faced a situation when I my Model has "public" methods, e.g. Model.find() which will work without instantiating the model. But now because it's not been instantiated, functions inside Model can not access store by this.store.

What I did, is I started also adding store to the constructor itself Model.store = options.store which fixes the problem. But now store is exposed to anything that uses Model constructor and this is not desirable.

I am guessing I am doing something wrong. So I would appreciate some help.

If I get what you're saying correctly, then I think what you want is to allow for a "static" find() method on Model without exposing the store variable. Javascript doesn't really have a formal private scope for classes, but you can get what you want using closures. Here's a fiddle:

http://jsfiddle.net/52FPy/

EDIT: An updated fiddle to demonstrate various ways to expose/hide info using closures: http://jsfiddle.net/52FPy/2/

Briefly:

var Model = function(){
    var store = 'this is a store';
    var Model = function(){

    }

    Model.find = function(){
        return store;
    }

    return Model;
}()

This will "hide" the store variable in the way you want.