Nea*_*eal 7 javascript static-methods object static-members
是否有正确的方法来创建私有静态javascript变量(和函数),无论您创建多少次都不会更改new Obj?
这是我尝试过的,它似乎工作:
var ObjClass = (function(){
var static_var = 0; //private static variable
var static_fn = function(){ return static_var; }; //private static function
return function(){
++static_var;
var thisNumber = static_var;
this.getThisNumber = function(){
return thisNumber;
}
this.getStaticNumber = static_fn; //making static fn public
}
})();
var obj1 = new ObjClass;
var obj2 = new ObjClass;
var obj3 = new ObjClass;
console.log(obj1.getThisNumber()); //output `1`
console.log(obj1.getStaticNumber()); //output `3`
console.log(obj2.getThisNumber()); //output `2`
console.log(obj2.getStaticNumber()); //output `3`
console.log(obj3.getThisNumber()); //output `3`
console.log(obj3.getStaticNumber()); //output `3`?
Run Code Online (Sandbox Code Playgroud)
或者还有其他 更好的方法吗?
是的,这是创建私有静态变量的正确方法.
但是,我会对待static_fn不同的.看来你希望它是公开的.
Function对象,因此可以使用任何其他js对象的属性进行扩展.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`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5646 次 |
| 最近记录: |