1

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

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

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

Flash AS3:ReferenceError:错误 #1056:无法创建属性

ReferenceError:错误 #1056 - 实例名称错误

我没有使用可视化 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;
}
4

1 回答 1

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

于 2012-06-22T03:36:39.983 回答