五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > 面向?qū)ο蟮腏avaScript(一) — 類及類的繼承

面向?qū)ο蟮腏avaScript(一) — 類及類的繼承

文章來源:365jz.com     點(diǎn)擊數(shù):229    更新時(shí)間:2009-09-30 11:59   參與評論
主機(jī)網(wǎng)全新上線,買空間、服務(wù)器就上主機(jī)網(wǎng),安全有保障!CNIDC.COM

看到很多做ASP.NET開發(fā)的JS水平都很差,所以想寫一個(gè)面向?qū)ο蟮腏avaScript系列,希望對JS新手有所幫助。不知道能否堅(jiān)持下去。今天從類(非靜態(tài)類)及類的繼承開始。我用游戲中的角色(玩家,怪物)來做示例。

首先是角色類,具有基本屬性 Name,HP,PhysicalDamage和基本方法PhysicalAttack

以下為引用的內(nèi)容:

    //角色
    //類名:Role
    function Role(name, hp, pd) {
        
this.Name = name; //屬性-名字
        this.HP = hp; //屬性-生命
        this.PhysicalDamage = pd; //屬性-物理攻擊力
        //方法-物理攻擊(r:被攻擊目標(biāo))
        this.PhysicalAttack = function(r) {
            alert(
this.Name + " 物理攻擊 " + r.Name + "\r\n HP - " + this.PhysicalDamage);
            r.HP 
= r.HP - this.PhysicalDamage;
        }
    }
    
    
var feifei = new Role("飛飛"1000100);//實(shí)例化出一個(gè)人物
    var rabbit = new Role("兔子"40050); //實(shí)例化出一個(gè)怪物
    feifei.PhysicalAttack(rabbit); //發(fā)起物理攻擊
    alert("兔子當(dāng)前HP:" + rabbit.HP);

由于Role類不能滿足需要,我們新建兩個(gè)類Player,Monster繼承Role

以下為引用的內(nèi)容:

    //普通怪物 繼承 Role
    function Monster(name, hp, pd) {
        Role.apply(
this, arguments); //通過apply實(shí)現(xiàn)繼承,強(qiáng)大的apply使Monster具備了Role的所有屬性與方法,apply和call是個(gè)神奇的東西,大家有興趣自己谷歌。
    }
    
//玩家 繼承 Role
    function Player(name, hp, mp, pd, md, exp) {
        Role.apply(
thisnew Array(name, hp, pd)); //通過apply實(shí)現(xiàn)繼承,并傳參賦值
        this.MP = mp; //屬性-魔法值
        this.MagicDamage = md; //屬性-魔法攻擊力
        this.Exp = exp; //屬性-經(jīng)驗(yàn)值
        //方法-魔法攻擊(r:被攻擊目標(biāo))
        this.MagicAttack = function(r) {
            
if (this.MP > 9) {
                alert(
this.Name + " 魔法攻擊 " + r.Name + "\r\n HP - " + this.PhysicalDamage + "\r\n MP - 10 , Exp + 10");
                r.HP 
= r.HP - this.MagicDamage;
                
this.MP -= 10;
                
this.Exp += 10;
            }
            
else
                alert(
"魔法值不夠");
        };
        
//這里重寫 PhysicalAttack 方法,很不方便!不知道有好的方法沒???
        this.PhysicalAttack = function(r) {
            alert(
this.Name + " 物理攻擊 " + r.Name + "\r\n HP - " + this.PhysicalDamage + "\r\n Exp + 10");
            r.HP 
= r.HP - this.PhysicalDamage;
            
this.Exp += 10;
        };
    }
    
var xiaoxiao = new Player("小小"10000500200100,0);
    
var dog = new Monster("狗狗"60020);
    xiaoxiao.PhysicalAttack(dog);
    xiaoxiao.MagicAttack(dog);
    alert(
"狗狗當(dāng)前HP:" + dog.HP);
    alert(
"小小當(dāng)前Exp:" + xiaoxiao.Exp);

代碼中做了詳細(xì)的注釋,就不在廢話。

如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答??! 點(diǎn)擊進(jìn)入論壇

發(fā)表評論 (229人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號