Переменные, объявленные с помощью class
, ведут себя аналогично переменным, объявленным с помощью const
и let
, - они не назначаются неявным образом объекту окна (что, возможно, является хорошей вещью). Если вы хотите поставить Unit
на window
, вам придется сделать это явно:
class Unit {
constructor(){
console.log('constructing');
}
}
window.Unit = Unit;
var str = "Unit";
var a = new window[str]();
Вы можете рассмотрите возможность использования собственного объекта классов, чтобы избежать глобального загрязнения:
const myClasses = {
Unit: class Unit {
constructor(){
console.log('constructing');
}
}
};
var str = "Unit";
var a = new myClasses[str]();
Значения объекта не могут ссылаться друг на друга в процессе объявляя литерал объекта - чтобы поместить подкласс в myClasses
, расширяющий один из существующих классов, вы должны будете сделать это вне объявления myClasses
:
Ваш не наблюдение чего-либо из-за CGRectZero. Необходимо установить размер в случае.
В UICatalog, если Ваш разговор о том, как они использовали CGRectZero для CustomView... хорошо при рассмотрении CustomView.m, Вы будете видеть, что они на самом деле игнорируют CGRectZero и устанавливают кадр на размер в initWithFrame:
Удостоверьтесь Вы: