创建动态类

默认情况下,类的属性和方法是固定的。也就是说,类的实例不能创建或访问该类原来未声明或定义的属性或方法。例如,考虑一个 Person 类,该类定义了两个属性 nameage

class Person {
  var name:String;
  var age:Number;
}

如果您在另一个脚本中创建了 Person 类的一个实例,并且尝试访问某个该类中不存在的属性,编辑器将生成一个错误。例如,以下代码创建 Person 类的一个新实例 (a_person),然后尝试给名为 hairColor 的属性赋值,但该属性实际不存在。

var a_person:Person = new Person();
a_person.hairColor = "blue"; // 编译器错误

此代码将导致一个编译器错误,因为 Person 类未声明名为 hairColor 的属性。在大多数情况下,这与您的需要正好相符。

但在某些情况下,您可能需要在运行时添加和访问原类定义中未定义的属性或方法。这可以通过 dynamic 类限定符来实现。例如,以下代码在上面讨论的 Person 类中添加了 dynamic 限定符:

dynamic class Person {
  var name:String;
  var age:Number;
}

现在,Person 类的实例就可以添加和访问原类定义中未定义的属性和方法了。

var a_person:Person = new Person();
a_person.hairColor = "blue"; // 由于是动态类,因此不会出现编译器错误

动态类的子类也是动态的。