我已经在下面的java-script中创建了一个类(构造函数),该类具有静态类型的属性。
function MyClass(property1 )
{
this.Property1 = property1 || "";
}
MyClass.StaticProperty = {
Running: "Running",
NotRunning: "NotRunning"
}
现在,我可以使用以下构造函数名称访问上述静态属性:
MyClass.StaticProperty.Running
但是我也想使用构造函数的一个实例访问属性,如下所示:
var myClassInstance = new MyClass("value");
var status = myClassInstance.StaticProperty.Running;
我知道,如果它是原型变量或在构造函数内部定义的变量,我可以访问。但是我不想这样做,因为我希望它表现为静态变量。
用例:
我有多个具有相同属性名称的构造函数。我在数组中获取这些构造函数实例。我想遍历数组中的每个构造函数并读取静态变量。例如
var allStaticPropertyValues = [];
for(index = 0; index < arrayOfConstructors.length; index++)
{
for(var property in arrayOfConstructors[index].StaticProperty)
{
allStaticPropertyValues.push(arrayOfConstructors[index].StaticProperty[property]);
}
}
我尝试过的事情:
我尝试使用 typeof 关键字获取类Type,但它仅作为对象提供,而不是可用于访问属性的构造方法引用。
instanceOfObject.constructor.getname() ,它将以字符串而不是引用的形式给出构造函数的名称。
答案 0 :(得分:2)
您可以使用constructor
实例的MyClass
属性获取MyClass
,然后可以访问MyClass
的静态变量
function MyClass(property1 )
{
this.Property1 = property1 || "";
}
MyClass.StaticProperty = {
Running: "Running",
NotRunning: "NotRunning"
}
var myClassInstance = new MyClass("value");
var status = myClassInstance.constructor.StaticProperty.Running;
console.log(status)
答案 1 :(得分:1)
访问constructor
属性将为您提供对构造函数(对象,而不是字符串)的直接引用,因此您可以直接访问其StaticProperty
属性:
function MyClass(property1 ){
this.Property1 = property1 || "";
}
MyClass.StaticProperty = {
Running: "Running",
NotRunning: "NotRunning"
}
var myClassInstance = new MyClass("value");
var status = myClassInstance.constructor.StaticProperty.Running;
console.log(status);