您现在的位置: 365建站网 > 365文章 > 面向对象的JavaScript(一) — 类及类的继承

面向对象的JavaScript(一) — 类及类的继承

文章来源:365jz.com     点击数:224    更新时间:2009-09-30 11:59   参与评论
主机网全新上线,买空间、服务器就上主机网,安全有保障!CNIDC.COM

看到很多做ASP.NET开发的JS水平都很差,所以想写一个面向对象的JavaScript系列,希望对JS新手有所帮助。不知道能否坚持下去。今天从类(非静态类)及类的继承开始。我用游戏中的角色(玩家,怪物)来做示例。

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

以下为引用的内容:

    //角色
    //类名:Role
    function Role(name, hp, pd) {
        
this.Name = name; //属性-名字
        this.HP = hp; //属性-生命
        this.PhysicalDamage = pd; //属性-物理攻击力
        //方法-物理攻击(r:被攻击目标)
        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);//实例化出一个人物
    var rabbit = new Role("兔子"40050); //实例化出一个怪物
    feifei.PhysicalAttack(rabbit); //发起物理攻击
    alert("兔子当前HP:" + rabbit.HP);

由于Role类不能满足需要,我们新建两个类Player,Monster继承Role

以下为引用的内容:

    //普通怪物 继承 Role
    function Monster(name, hp, pd) {
        Role.apply(
this, arguments); //通过apply实现继承,强大的apply使Monster具备了Role的所有属性与方法,apply和call是个神奇的东西,大家有兴趣自己谷歌。
    }
    
//玩家 继承 Role
    function Player(name, hp, mp, pd, md, exp) {
        Role.apply(
thisnew Array(name, hp, pd)); //通过apply实现继承,并传参赋值
        this.MP = mp; //属性-魔法值
        this.MagicDamage = md; //属性-魔法攻击力
        this.Exp = exp; //属性-经验值
        //方法-魔法攻击(r:被攻击目标)
        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(
"狗狗当前HP:" + dog.HP);
    alert(
"小小当前Exp:" + xiaoxiao.Exp);

代码中做了详细的注释,就不在废话。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (224人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号