在ActionScript 3中扩展对象原型

时间:2012-06-22 01:55:53

标签: actionscript-3 flash prototype extending

每当我尝试扩展Object原型时,我都会收到错误:

  

错误#1056:无法在mx.core.UIComponentDescriptor上创建属性my_extension。

我四处搜寻,发现了这些:

Flash AS3: ReferenceError: Error #1056: Cannot create property

ReferenceError: Error #1056 - instance name Error

我没有使用可视化IDE来设计舞台,而是使用MXML和AS3文件,因此我不确定如何处理此错误。

我的代码:

Object.prototype.keys = function(): Array {
  var keys: Array = [];

  for (var key: * in this) {
    keys.push(key);
  }

  return keys;
}

Object.prototype.values = function(): Array {
  var values: Array = [];

  for each (var value: * in this) {
    values.push(value);
  }

  return values;
}

1 个答案:

答案 0 :(得分:4)

使用prototype扩展一个类似乎是ActionScript 1或2。

在AS3中,如果该类是动态的,您可以进行原型设计。

原型有缺点:

  • 只能扩展动态类,例如,无法向Math添加方法。
  • 调用存储在原型中的方法需要更长时间才能执行。
  • 由于方法是在运行时添加的,因此编辑器无法通过代码提示显示它们或使用正确的语法高亮显示。

由于所有类都扩展了对象,因此没有必要明确声明Object为基础;但是,您可以定义要扩展的AbstractObject类:

package
{

    public dynamic class AbstractObject extends Object
    {

        public function AbstractObject()
        {
            super();
        }

        public function get keys():Array
        {
            var keys:Array = [];

            for (var key:* in this)
            {
                keys.push(key);
            }

            return keys;
        }

        public function get values():Array
        {
            var values:Array = [];

            for each (var value:* in this)
            {
                values.push(value);
            }

            return values;
        }

    }
}

您班级的子类型AbstractObject