原型构造函数三个案例

第一个案例的要求 /输入矩形的长,宽输出面积

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 输入矩形的长,宽输出面积
        function Rect(width,height){
            this.width=width
            this.height=height
        }
        // 两个不同的对象调用同一个方法就给他挂在原型上
        Rect.prototype.showInfo=function(){
            console.log("面积为:"+this.width*this.height)
        }
        // new两个对象
        var r1=new Rect(10,10)
        var r2=new Rect(20,20)
        // 调用方法
        r1.showInfo()
        r2.showInfo()
    </script>
</body>
</html>

第二个案例
创建两个不同的tank对象,舒克和贝塔,调用舒克的攻击方法攻击贝塔三次
然后展示舒克和贝塔的基本信息

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 创建两个不同的tank对象,舒克和贝塔
        // 调用舒克的攻击方法攻击贝塔三次
        // 然后展示舒克和贝塔的基本信息
        function Tank(name){
            this.name=name
            this.hp=100
            this.number=100
        }
        // 两个不同的对象,调用相同的方法,都挂在原型上
        Tank.prototype.fire=function(tank){
            if("hp" in tank){
             tank.hp-=10
             this.number--
            }else{
              alert("传入对象必须要有hp属性")
            }
        }
        Tank.prototype.showInfo=function(){
            console.log(this.name+"  剩余血量为  "+this.hp+"  剩余子弹为  "+this.number);
        }
        var t1=new Tank("舒克")
        var t2=new Tank("贝塔")
        t1.fire(t2)
        t1.fire(t2)
        t1.fire(t2)
        t1.showInfo()
        t2.showInfo()
    </script>
</body>
</html>

第三个案例
实现一个用户 抓牌,交换牌和展示牌功能

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 实现一个用户 抓牌,交换牌和展示牌功能
        // 创建一个用户对象,使用抓牌功能,然后展示牌,再交换牌,再展示牌
        // 属性 leftHand rightHand name
        // 方法 grab show change
        // 构造一个"人",左右手抓牌之前为空为空
        function User(name){
           this.name=name
           this.leftHand=""
           this.rightHand=""
        }
        // 左右手进行抓牌的方法
        User.prototype.garb=function(){
            // 随机抽取俩张牌,一个放在左手,一个放在右手
            let c1=new Card()
            let c2=new Card()
            // 为左右手赋值
            this.leftHand=c1.color+c1.size
            // 添加判定条件 解决 随机覆盖 问题(左右手拿的牌color和size相同)
            // 放置随机覆盖问题 用while循环写一个死循环
            while(true){
            // 不能直接比较对象
            // 对象 属于引用数据类型
            // 引用数据类型 变量保存的是对象存储地址,不是其中的内容,所以不能直接比较
            // 如果左手的的卡牌和右手的卡牌完全相同,那么就给右手重新随机生成一个卡牌
            // 直到左右手的卡牌不相同的时候,跳出这个死循环
                if(c1.color+c1.size==c2.color+c2.size){
                    let c2=new Card()
                }else{
                    break
                }
            }
            this.rightHand=c2.color+c2.size
        }
        // 展示方法
           User.prototype.show=function(){
            console.log("名叫"+this.name+"的小伙儿 "+"左手为"+this.leftHand+";右手为"+this.rightHand)
        }
        // 随机生成牌
        function Card(){
        // 声明两个个局部变量,用来放置牌的大小,花色
            let sizes=["大王","小王","A","2","3","4","5","6","7","8","9","10","J","Q","k"]
            let colors= ["黑桃","梅花","红心","方片"]
        // 随机抽取牌的大小为
            this.size=sizes[parseInt(Math.random()*sizes.length)]
        // 增加一个if判定,如果是大王或者小王,是不用随机生成颜色的
             if(this.size=="大王"||this.size=="小王"){
        // console.log("我是大小王")
              this.color=""
             }else{
        // 随机抽取牌的颜色为
                this.color=colors[parseInt(Math.random()*colors.length)]
             }
        }
        // 交换方法
          User.prototype.change=function(){
            console.log("名叫"+this.name+"的小伙儿  开始了帅气的换牌动作")
        // 声明一个新变量,放置左手的牌
            let t=this.leftHand
        // 然后把右手的牌放到左手上
            this.leftHand=this.rightHand
        // 右手去拿变量里的牌
            this.rightHand=t
        // 完成交换
          }

        let c1=new User("查德")
        c1.show()
        c1.garb()
        c1.show()
        c1.change()
        c1.show()
        // let c1=new Card()
        // console.log(c1)
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

油、东西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值