كيف يمكنني تجاوز وظيفة setter في وقت التشغيل في ActionScript؟
-
03-07-2019 - |
سؤال
لديّ فئة مع وظائف 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. كل فئة لديها كائن النموذج الأولي المرتبط ، ويتم مشاركة خصائص كائن النموذج الأولي من قبل جميع مثيلات الفصل.