AS3中的原型繼承介紹

來源:互聯網
上載者:User

作者:閃刀浪子   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);     //沒有改變,還是輸出 ”空"

瞭解了原型繼承原理,可以協助我們在某些特殊場合應付一些特殊的需求。

比如最近在一個遊戲設計需求中就可以用這種辦法解決,看這篇文章。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.