【问题标题】:Extending Object prototype in ActionScript 3在 ActionScript 3 中扩展对象原型
【发布时间】:2012-06-22 01:55:53
【问题描述】:

每当我尝试扩展 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;
}

【问题讨论】:

  • 将代码放入括号中:object["keys"](); ,因为如果你不写非动态对象,你会得到编译时错误。无论如何,我会建议你例如:创建类 ObjectUtil 和内部函数 getKeys ,而不是使用 ObjectUtil.getKeys(myObject);

标签: actionscript-3 flash prototype extending


【解决方案1】:

使用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

【讨论】:

  • 你需要扩展对象吗?我以为每个类默认都是一个对象?
  • 不,我在回答中说过。
  • 扩展对象不适用于我的目的。我还是不太明白——你是在暗示 Object 是一个静态类吗?
  • 通过扩展基类来使用面向对象的开发范式,而不是在类定义上对成员进行原型设计。否则,请为此功能推荐使用一些静态 ObjectUtil 类。
  • 我 +1 这个很好的答案,而且问这个问题的人可能不会接受任何答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 2015-09-24
相关资源
最近更新 更多