作者:閃刀浪子 www.iflashigame.com http://hi.baidu.com/mr_ziqiang
原型繼承是早起AS版本所使用的整合方式,在AS3中允許兩種方式的整合——類繼承和原型繼承
原型繼承的基本原理:
每種類都有一個關聯的原型對象,而原型對象的屬性由該類的所有執行個體共用。 在建立一個類執行個體時,它具有對其類的原型對象的引用,這將作為執行個體及與其關聯的類原型對象間的連結。 運行時,如果在類執行個體中找不到某屬性,則會檢查委託(該類的原型對象)中是否有該屬性。 如果原型對象中不包含該屬性,該過程會繼續在階層中連續的更進階別上對原型對象進行委託檢查,直至 Flash Player 找到該屬性為止。
看一段代碼:
Sprite.prototype.copyright="www.iflashigame.com";
var sp:Sprite=new Sprite;
trace((sp as Object).copyright); //輸出www.iflashigame.com
如果不用型別宣告也可以寫成這樣:
Sprite.prototype.copyright="www.iflashigame.com";
var sp=new Sprite;
trace(sp.copyright);
需要注意的是如果是非動態類那麼為類原型添加的屬性會成為一個唯讀屬性,例如:
Sprite.prototype.copyright="空";
var sp=new Sprite;
var mc=new MovieClip;
trace(sp.copyright); //輸出 "空"
trace(mc.copyright); //輸出 “空",由於MovieClip繼承自Sprite,所以也能得到屬性
sp.copyright="www.iflashigame.com"; //報錯了,無法為 flash.display.Sprite 建立屬性 copyright。
mc.copyright="www.iflashigame.com"; //新的值將覆蓋繼承過來的
trace(sp.copyright); //無法賦值,還是輸出 "空";
trace(mc.copyright); //輸出"www.iflashigame.com";
trace(Sprite.prototype.copyright); //沒有改變,還是輸出 ”空"
瞭解了原型繼承原理,可以協助我們在某些特殊場合應付一些特殊的需求。
比如最近在一個遊戲設計需求中就可以用這種辦法解決,看這篇文章。