Yes, this is the right approach to create private static variables.
However, I would consider static_fn
different. It seems you want this publicly.
- It should be on your prototype of the class "class", because it does not interact with private instance variables
- It does not even interact with instances at all. The usual approach is to put such a function / variable on the "class" itself, i.e. To the constructor in JS. Since the constructor is a
Function
object, it can be extended using properties like any other js object.
var ObjClass = (function closure(){ var static_var = 0; //static private (scoped) variable function static_fn(){ return static_var; }; //static private (scoped) function function ObjClass() { var thisNumber = ++static_var; // private instance variable this.getThisNumber = function() { // public instance method return thisNumber; // "privileged" to access scoped instance variables }; } ObjClass.getStaticNumber = static_fn; // make the static_fn public return ObjClass; })(); var obj1 = new ObjClass; var obj2 = new ObjClass; console.log(ObjClass.getStaticNumber()); //output `2` var obj3 = new ObjClass; console.log(ObjClass.getStaticNumber()); //output `3` console.log(obj1.getThisNumber()); //output `1` console.log(obj2.getThisNumber()); //output `2` console.log(obj3.getThisNumber()); //output `3`
Bergi source share