1

component.nonInheritingStyles (UIComponent) を繰り返し処理していて、重複するプロパティを見つけています。そんなことがあるものか?

        var array:Array = getArrayFromObject(myLabelComponent.nonInheritingStyles);

        /**
         * 
         **/
        protected function getArrayFromObject(value:Object):Array {
            var array:Array = [];

            for (var styleProp:String in value) {
                trace("style:"+styleProp); // fontFamily duplicates a few times 
                array.push({name:styleProp, value:value[styleProp]});
            }

            return array;
        }
4

3 に答える 3

2

Flex SDK の CSSStyleDeclaration クラスのすべてのマジック。

メソッドを見つけることができます:

mx_internal function addDefaultStyleToProtoChain(chain:Object,
                                            target:DisplayObject,
                                            filterMap:Object = null):Object

そして、コードを見ることができます:

defaultFactory.prototype = chain;
chain = new defaultFactory();

これはすべての魔法を含むコードです。

それを理解するために、例を書くことができます:

protected function getArrayFromObject(value:Object):Array {
    var array:Array = [];

    var parentStyleFactory:Function = function():void {
        this.x = 1;
    }

    var styleFactory:Function = function():void {
        this.x = 2;
    }

    var parentStyle:Object = new parentStyleFactory();
    styleFactory.prototype = parentStyle;
    var style:Object = new styleFactory();

    for (var styleProp:String in style) {
        trace("style:"+styleProp); // fontFamily duplicates a few times
        array.push({name:styleProp, value:style[styleProp]});
    }

    return array;
}

これはトレースする例です:

[trace] style:x
[trace] style:x
于 2012-09-11T21:18:48.033 に答える
1

この例を書くと:

var obj:Object = {x:1, y:1};
var factory:Function = function(){
    this.x = 2;
};

factory.prototype = obj;
var obj2:Object = new factory();
trace(obj2.x);
trace(obj2.y);

コンソールに次のように表示されます。

[trace] 2
[trace] 1

したがって、あるプロパティ フラッシュの値を取得しようとすると、オブジェクト プロパティにアクセスしようとし、プロパティが存在しない場合は、プロトタイプからプロパティにアクセスしようとします。

ただし、オブジェクト プロパティ フラッシュによって forin を反復処理すると、すべてのオブジェクト プロパティとすべてのオブジェクト プロトタイプ プロパティが返されます。

于 2012-09-12T08:23:15.553 に答える
0

私の推測では、一度に 1 つのクラスの継承チェーンからスタイルを取得しており、スタイルの繰り返しを探していません。それは機能の目的ではないようです。

このコンポーネントの非継承スタイル チェーンの先頭。getStyle() メソッドは単に nonInheritingStyles[styleName] にアクセスして、プロトタイプにリンクされたチェーン全体を検索します。このオブジェクトは、initProtoChain() によって設定されます。通常、開発者はこのプロパティに直接アクセスする必要はありません。

ソース

スタイルを継承したいかもしれません

于 2012-09-12T13:25:50.267 に答える