Operator ActionScript sebagai

apakah ada yang punya penjelasan bagus tentang operator as?

Di satu sisi menurut saya, seringkali lebih baik menggunakan sebagai daripada membuat instance objek baru.

Namun ada kalanya operator ini mengecewakan saya. Misalnya ketika memuat file teks dalam format XML melalui URLLoader:

private function completeHandler(event:Event):void {
    var loader:URLLoader = URLLoader(event.target);
    trace("completeHandler: " + loader.data);

    var x:XML = new XML(loader.data);
    trace("x=" + x);
}

Mengapa saya harus menggunakan konstruktor di sini? Mengapa saya tidak bisa mengatakan var x:XML = loader.data sebagai XML; dan menghemat memori?

Terima kasih atas wawasan apa pun! Alex


person Alexander Farber    schedule 21.02.2011    source sumber
comment
coba dengan var x:XML = new XML(loader.data);   -  person Cay    schedule 21.02.2011
comment
Ya terima kasih, itu salah ketik dalam pertanyaan saya.   -  person Alexander Farber    schedule 21.02.2011


Jawaban (1)


as mengevaluasi apakah tipe suatu variabel merupakan kelas super atau subkelas dari kelas lain. Itu tidak membuat objek baru. Perbedaannya dengan is adalah bahwa meskipun is mengembalikan nilai Boolean, as mengembalikan objek dengan tipe yang diinginkan, atau null. Ini digunakan untuk tipe gips.

Lihat dokumentasi ActionScript.

Kasus penggunaan yang umum adalah menggunakan MovieClip di panggung, yang diambil berdasarkan nama instance:

// This will not compile:
var d:DisplayObject = stage.getChildByName ("instance1"); 
d.gotoAndPlay (2);

// This will play the MovieClip from frame 2
var m : MovieClip = stage.getChildByName ("instance1") as MovieClip;
m.gotoAndPlay (2); 

stage.getChildByName() selalu mengembalikan DisplayObject, terlepas apakah itu benar-benar MovieClip, Sprite, Button, dll. Jadi jika Anda ingin menggunakan salah satu metode kelas MovieClip, Anda perlu mengetikkan cast ke MovieClip terlebih dahulu. Namun, ini tidak membuat MovieClip baru tetapi hanya memastikan bahwa Anda menggunakan jenis yang benar.

person weltraumpirat    schedule 21.02.2011
comment
+1 Juga @Alexander Farber Anda dapat memilih dengan notasi berikut. var m : MovieClip = MovieClip(stage.getChildByName (instance1)); Perbedaannya di sini adalah jika cast tidak berhasil, error runtime akan muncul. Sebaliknya operator as akan mengembalikan null. - person Allan; 21.02.2011
comment
Terima kasih. Penjelasan mengapa saya mendapatkan null dalam contoh saya: var x:XML = loader.data as XML; ? - person Alexander Farber; 21.02.2011
comment
Tentu saja, loader.data bukan objek XML (meskipun berisi teks xml). Jika Anda menulis XML(loader.data), Anda menggunakan operator tingkat atas XML(), yang mengambil teks dan membuat objek XML darinya. - person alxx; 21.02.2011