Javascript 类中的静态变量
Static variables in a Javascript class
有没有一种正确的方法来创建私有的静态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`
演示
还是有其他更好的方法?
是的,这是创建私有静态变量的正确方法。
但是,我会以不同的方式对待static_fn
。看来你希望它是公开的。
- 它应该在你的"类"原型上,因为它不与私有实例变量交互
- 它甚至根本不与实例交互。通常的方法是将这样的函数/变量放在"类"本身上,即 JS 中的构造函数。由于构造函数是一个
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`
我以前使用过这种简单的方法来创建静态变量,除了它们是私有的。
function MyClass() {
var static = this.constructor.static = this.constructor.static || {
var1: defValue,
...
}
static.var1 = ... ;
}
即仅将静态变量存储为类的主要构造函数的属性。
相关文章:
- Node.js-模块导出静态变量
- 在angularJS中定义函数内部的静态变量
- jsp内部html中的Javascript静态变量
- 是否可以在window.onresize上更改jQuery插件的静态变量
- 如何使用 dedeclare 定义 dojo 静态变量或静态对象
- 为什么我可以在ServiceNow中访问示例脚本化Web服务(订购黑莓)并返回静态变量,但它没有订购黑莓
- 为什么 Object.create 使我的私有变量成为静态变量
- 使用静态变量初始化同一类中的变量
- 具有 John Resig 简单类模式的静态变量
- 使用原型模拟静态变量
- 如何在 javascript 中使用 const 关键字 (ecma 6) 和函数静态变量
- 为什么要在函数定义之外引用静态变量(函数属性)
- 设置超时函数回调静态变量
- Javascript 类中的静态变量
- 更新 JavaScript 函数中的静态变量
- 是否可以使用 CoffeeScript 迭代类的静态变量和方法
- Javascript 中的静态变量继承 (ES6)
- 无法访问 JavaScript 对象中的静态变量,该对象对另一个 JavaScript 对象进行子类化
- 如何使用静态变量数组
- Javascript静态变量,并在不同的页面中使用