Actionscript 3 在ActionScript 3中扩展对象原型

Actionscript 3 在ActionScript 3中扩展对象原型,actionscript-3,flash,prototype,extending,Actionscript 3,Flash,Prototype,Extending,每当我尝试扩展对象原型时,都会出现一个错误: 错误#1056:无法在mx.core.UIComponentDescriptor上创建属性my_扩展名 我四处寻找,发现了这些: 我没有使用可视化IDE来设计阶段,而是使用MXML和AS3文件,所以我不确定如何处理这个错误 我的代码: Object.prototype.keys = function(): Array { var keys: Array = []; for (var key: * in this) { keys.

每当我尝试扩展对象原型时,都会出现一个错误:

错误#1056:无法在mx.core.UIComponentDescriptor上创建属性my_扩展名

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

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

使用
prototype
来扩展类似乎非常适合ActionScript 1或2

在AS3中,如果类是动态的,您可能能够创建原型

原型有以下缺点:

  • 只有动态类可以扩展,例如不能向数学中添加方法
  • 对存储在原型中的方法的调用执行时间更长
  • 因为方法是在运行时添加的,所以编辑器不能用代码提示或使用正确的语法突出显示它们
由于所有类都扩展了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

使用
prototype
扩展类似乎非常适合ActionScript 1或2

在AS3中,如果类是动态的,您可能能够创建原型

原型有以下缺点:

  • 只有动态类可以扩展,例如不能向数学中添加方法
  • 对存储在原型中的方法的调用执行时间更长
  • 因为方法是在运行时添加的,所以编辑器不能用代码提示或使用正确的语法突出显示它们
由于所有类都扩展了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

将代码放在大括号中:对象[“键](),因为如果您在非动态对象上编写而不使用,您将得到编译时错误。无论如何,我会建议您例如:创建类ObjectUtil和函数getKeys内部,而不是使用ObjectUtil.getKeys(myObject);将代码放在大括号中:对象[“键](),因为如果您在非动态对象上编写而不使用,您将得到编译时错误。无论如何,我会建议您例如:创建类ObjectUtil和函数getKeys内部,而不是使用ObjectUtil.getKeys(myObject);您需要扩展对象吗?我认为默认情况下每个类都是一个对象?不,这是我在回答中说的。扩展对象不符合我的目的。我还是不太明白——你是在暗示对象是一个静态类吗?与其将成员原型化为类定义,不如通过扩展基类来使用面向对象的开发范例。否则,请使用一些建议用于此功能的静态
ObjectUtil
类。I+1这是一个很好的答案,再加上提问的人可能不会接受任何答案。您需要扩展对象吗?我认为默认情况下每个类都是一个对象?不,这是我在回答中说的。扩展对象不符合我的目的。我还是不太明白——你是在暗示对象是一个静态类吗?与其将成员原型化为类定义,不如通过扩展基类来使用面向对象的开发范例。否则,请使用一些建议用于此功能的静态
ObjectUtil
类。