#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]);
}
}
Что я пробовал:
-
Я попытался получить тип класса, используя ключевое слово typeof, но оно выдается только как объект, а не ссылка на конструктор, которую я могу использовать для доступа к свойству.
-
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);