كيف يمكنني تجاوز وظيفة setter في وقت التشغيل في ActionScript؟

StackOverflow https://stackoverflow.com/questions/602590

سؤال

لديّ فئة مع وظائف Setter و Getter. أحتاج إلى تعديل إحدى مثيلات هذه الفئة بحيث تقوم بوظيفة Setter بمعالجة الإدخال قبل تعيينه للمتغير المحلي.

أو ، بطريقة أكثر تفصيلًا ، ما الذي يجب أن أستخدمه بدلاً من $$$ في المثال أدناه؟

class MyClass{
    private var _legend:Array;
    function set legend(legend:Array):void{
        _legend= legend;
    }
    function get legend():Array{
        return _legend;
    }
    function someFunction():void{
        foo();
    }
}
var mc:MyClass = new MyClass();
mc.someFunction = function():void{
    bar();
}
mc.$$$ = new function(legend:Array):void{
    _legend = process(legend);
}
هل كانت مفيدة؟

المحلول

عادةً ما يمكنك الفئة الفرعية MyClass لتعديل السلوك (تعدد الأشكال) من MyClass.

class MySubClass extends MyClass {
        function set legend(legend:Array):void{
                // do your checking here. Then call the 
                // setter in the super class.

                super.legend = legend;
        }
}

نصائح أخرى

لماذا لا تمرن على المثيل مدخلات معالجة؟

mc.legend = process(legend);

إذا لم يكن ذلك ممكنًا ، فيمكنك تعديل Setter في MyClass واتخاذ منطقية اختيارية للقيام بالمعالجة.

function set legend(legend:Array, flag:bool = false):void{
            _legend = flag ? process(legend) : legend;
}

لاحظ أن ميراث النموذج الأولي لا يقيد نفسه على مثيل معين. من الوثائق:

ميراث النموذج الأولي - هو آلية الميراث الوحيدة في الإصدارات السابقة من ActionScript وتعمل كشكل بديل للميراث في ActionScript 3.0. كل فئة لديها كائن النموذج الأولي المرتبط ، ويتم مشاركة خصائص كائن النموذج الأولي من قبل جميع مثيلات الفصل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top