Expando允许向对象添加新的属性。

属性不支持number,string,bool类型和null。

当一个对象变得无法访问时,Expando不会继续控制被添加的属性值。

你总是可以创建一个新的number,它和已经存在的number完全相同。 这意味着,在number上的一个expando属性永远不可能被释放。 为避免这种情况,expando属性不能被添加到number中。 同样的情况也适用于string,bool和null,也包括字面量 (因为在它们出现多次时,计算的值完全相同)。

对于其它的类没有任何限制,即使对象是编译时常量。 请注意,如果将expando属性添加到编译时常量中,必须在它们可以更新的时候。

通常情况下,Expando适用于Web应用。 下面是命令行的简单例子,将一个对于与另一个对象关联,功能类似于Map

typedef CustomFunction(int foo, String bar);

Expando<CustomFunction> domFunctionExpando = new Expando<CustomFunction>();

main(){
  // 通常情况下,new的是Element
  final myElement = new Object();

  // 在DOM element上使用expando
  domFunctionExpando[myElement] = someFunc;

  // 现在,已经将函数附到对象后面
  // 接着可以调用函数:
  domFunctionExpando[myElement](42, 'expandos are cool');
}

void someFunc(int foo, String bar){
  print('Hello. $foo $bar');
}

Constructors

Expando([String name])

创建一个新的Expando。 可选参数name的目的是仅用作调试, 或使用相同的name创建两个不同的Expando,便于区分它们使用对象的不同属性。

Properties

hashCode int

获取对象的哈希值。

read-only, inherited
name String

传入构造函数的Expando的名称。 如果没有传递名称给构造函数,name为null

read-only
runtimeType Type

表示对象的运行时类型。

read-only, inherited

Operators

operator ==(other) bool

相等操作符。

inherited
operator [](Object object) → T

通过object获取Expando属性的值。如果对象还没有被扩展,方法返回null

operator []=(Object object, T value) → void

设置Expando的属性为object,关联的值为value。 当设置属性的值为null时,属性又会被有效地删除。

Methods

noSuchMethod(Invocation invocation) → dynamic

当一个不存在的函数或成员变量被访问时,该函数被调用。

inherited
toString() String

重写toString方法。