1

オブジェクトプロトタイプを拡張しようとすると、エラーが発生します。

エラー#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することは、非常にActionScript1または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 に答える