سؤال

أنا ببساطة يلعب مع ActionScript الأساسية 3 باستخدام Flash CS3 Pro.

أنا وضعت في إطار مفاتيح هذا الرمز البسيط جدا لتكرار رموز N "Brander":

for (var i:Number=0; i<20; i++) {
    var m = new brander("MS_"+i);
    addChild(m);
    m.name = "MS_"+i;
    m.x = 20*i;
    m.alpha = a;
    a-=0.05;
    m.y = 20;
}

يرتبط الرمز بصفته Brander.as.

الفصل هو هذا واحد:

package {
    import flash.display.*;
    public class brander extends MovieClip {
        var n:String;
        //
        public function brander(name) {
            setName(name);
        }
        //
        function setName(name) {
            this.n = name;
        }
        //
        function getName() {
            return n;
        }
    }
}

وهو بسيط جدا.

الآن: لاحظت أنني لا أستطيع تحديد أي شيء حقا في هذه الفئة. لذلك، عند استدعاء SETNNAME (عند إنشاء مثيل "Brander")، لا أقوم بإعداد أي شيء. هل هذا ممكن؟

اختبرت دون تصحيح الأخطاء، بمجرد كتابة:

btn.addEventListener(MouseEvent.MOUSE_DOWN, test);
//
function test(EVT) {
    trace(this.getChildByName("MS_2").getName());
}

لماذا نربط فئة عندما لا يستطيع هذا الفصل تخزين المعلومات؟ ما الخطأ الذي افعله؟


تعديل:

لقد وجدت أن هذا يعمل:

function fun(EVT) {
    trace((this.getChildByName("M_2") as brander).getName());
}

لكنني لا أستطيع أن أفهم لماذا: هل يمكن أن تخبرني لماذا؟

هل كانت مفيدة؟

المحلول

السبب هو أن function function () functression إرجاع displayObject. DisplayObject لا يحتوي على وظيفة GetName. ومع ذلك، فإن فئة Brander لا ترث من (يمتد) displayObject، وبالتالي يمكنك تخزينها كمستعرض. ولكن إذا كنت ترغب في استدعاء أي من وظائف Brander، فأنت بحاجة إلى إلقاءها على Brander أولا، باستخدام كما.

هناك الكثير من المعلومات حول يصب, تعدد الأشكال و ميراث عدة أماكن على شبكة الإنترنت.

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