如何在Javascript中创建静态变量
如果你来自一个基于类的静态类型的面向对象语言(比如java、C++或c),/e>我假设你正在创建一个与“类型”而不是实例相关联的变量或方法。
使用“经典”方法和构造函数的示例可能有助于您理解基本OO JavaScript的概念:
函数MyClass(){//构造函数
var privatevaluate=“foo”;//私有变量
this.publicVariable=“bar”;//公共变量
this.privilegedMethod=function(){//Public方法
警报(私有变量);
};
}
//实例方法将可用于所有实例,但仅在内存中加载一次
MyClass.prototype.publicMethod=函数(){
警报(this.publicVariable);
};
//所有实例共享的静态变量
MyClass.staticProperty=“baz”;
var myInstance=new MyClass();
staticProperty是在MyClass对象(函数)中定义的,与创建的实例无关,JavaScript将函数视为一级对象,因此作为一个对象,您可以为函数分配属性
更新:ES6引入了通过class关键字声明类的功能。它超越了现有的基于原型的继承
static关键字允许您轻松定义类中的静态属性或方法
让我们看看上面用ES6类实现的示例:
class MyClass{
//类构造函数,相当于
//构造函数的函数体
构造函数(){
const privateVariable='private value';//构造函数作用域中的private变量
this.publicVariable='public value';//公共属性
this.privilegedMethod=函数(){
//访问构造函数作用域变量的公共方法
console.log(privatevaluate);
};
}
//原型方法:
公共方法(){
console.log(this.publicVariable);
}
//所有实例共享的静态属性
static staticProperty='静态值';
静态方法(){
console.log(this.staticProperty);
}
}
//我们可以向类原型添加属性
MyClass.prototype.additionalMethod=函数(){
console.log(this.publicVariable);
};
var myInstance=new MyClass();
myInstance.publicMethod();//“公共价值”
myInstance.additionalMethod();//“公共价值”
myInstance.privilegedMethod();//“私人价值”
MyClass.staticMethod();//“静态值”