如何使用构造函数的实例变量在Java脚本中访问构造函数的静态属性?

时间:2019-04-22 08:28:30

标签: javascript

我已经在下面的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]);
    }
}

我尝试过的事情:

  1. 我尝试使用 typeof 关键字获取类Type,但它仅作为对象提供,而不是可用于访问属性的构造方法引用。

  2. instanceOfObject.constructor.getname() ,它将以字符串而不是引用的形式给出构造函数的名称。

2 个答案:

答案 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);