Как получить доступ к статическому свойству конструктора в java-script, используя переменную экземпляра конструктора?

#javascript

#javascript

Вопрос:

Я создал класс (constructor) в java-script, как указано ниже, который имеет свойство типа static.

 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, но оно выдается только как объект, а не ссылка на конструктор, которую я могу использовать для доступа к свойству.

  2. instanceOfObject.constructor.getname() который предоставит имя конструктора в виде строки, а не в качестве ссылки.

Ответ №1:

Вы можете использовать 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)  

Ответ №2:

Доступ к 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);