2017-01-12 2 views
0

Мне интересно, есть ли способ автоматически зарегистрировать класс в окне? Прямо сейчас, чтобы сделать так, что я должен сделать window.MyClass = MyClass вроде этого:Автоматически регистрировать класс для окна

class MyClass { 

} 

window.MyClass = MyClass; 

Я хотел бы, window.MyClass = MyClass автоматически произойдет, есть ли способ сделать это?

+0

Автоматически каким образом? Вы не сможете просто набрать 'class MyClass {...}', если бы он был глобальным, поэтому вам понадобится какой-то вид лесов для автоматической обработки подключения. Вы ищете более короткие леса, что у вас есть? Вы объявляете несколько классов в одном месте, чтобы вы были глобальными? Хотите ли вы использовать любые трансформаторы кода, такие как Babel, для автоматического ввода 'window.MyClass = MyClass' для вас? –

+0

В основном я создаю фреймворк, и было бы неплохо не регистрировать класс каждый раз, когда я создаю новый класс. Таким образом, у меня есть атрибут HTML, который выглядит как этот 'component =" MyClass "', а затем создается таким образом, как это 'new window [name]()', где имя равно MyClass. Это не работает, если у меня нет регистрационной части, и я бы хотел, чтобы это произошло автоматически. –

ответ

1

Одним из способов сделать это было бы создание функции для регистрации класса. [Классы] имеют свойство name, которое вы можете использовать для регистрации имени в глобальном пространстве. Это требует, чтобы вы объявляли свои классы внутри функции, но без какого-либо преобразования кода, выполняемого до того, как код попадет в браузер, это самое лучшее, что вы можете сделать.

function register(c) { 
 
    console.log('Registering ' + c.name); 
 
    window[c.name] = c; 
 
} 
 

 
register(class ClassA { 
 
    constructor() { 
 
    console.log('Created ClassA'); 
 
    } 
 
}); 
 

 
register(class ClassB { 
 
    constructor() { 
 
    console.log('Created ClassB'); 
 
    } 
 
}); 
 

 
register(class ClassC { 
 
    constructor() { 
 
    console.log('Created ClassC'); 
 
    } 
 
}); 
 

 
new ClassA(); 
 
new ClassB(); 
 
new ClassC();

+1

Я думаю, что это гораздо более элегантный способ справиться с этим! Спасибо! –

Смежные вопросы