JavaScript面向对象(三)练习

9 篇文章 0 订阅
7 篇文章 0 订阅

创建一个白菜,白菜可以唱,跳,rap,以及独有的beautiful方法;白菜有身高,体重,年龄,性别;白菜可以被舔狗继承,舔狗会bark,lick

Cabbage父类

使用构造器创建对象

function Cabbage(height,weight) {
    //构造器接受外部参数赋给对象的两个参数
    this.height=height;
    this.weight=weight;
    //构造器内部给对象一个岁数
    this.age=99;
    //内部添加唱跳方法
    this.SongAndJump=function () {
        console.log("身高体重是"+this.height+" "+this.weight+" 是练习生会唱会跳。。。");
    }

}
//使用原型链给对象一个性别
Cabbage.prototype.gender='Girl';

//原型链外部添加rap方法
Cabbage.prototype.rap=function(){
    //引用方法
    this.SongAndJump();

    console.log("我是"+this.gender+"我喜欢rap.....");

    //引用类方法
    Cabbage.beautiful();
};

//白菜独有的类方法,只允许外部添加
Cabbage.beautiful=function () {
  console.log("鸡你太美。。。。")
};


const c=new Cabbage("1.8cm","100kg");
c.rap();


身高体重是1.8cm 100kg 是练习生会唱会跳。。。
我是Girl我喜欢rap.....
鸡你太美。
LickDog子类
//导入父类模块
p=require('./JsCabbage').Cabbage;

//子类
function LickDog(dog) {
    this.dog=dog;
    this.bark=function () {
        console.log("我会叫。。。"+this.dog);
    }
}
//调用原型链继承父类
LickDog.prototype=new p("1cm","99kg");

LickDog.prototype.lick=function () {
    console.log("我会舔。。。");
    this.bark();
    //调用了父类的方法,所以要写在继承之后
    this.SongAndJump();
};

dog=new LickDog("Teddy");
dog.lick();

我会舔。。。
我会叫。。。Teddy
身高体重是1cm 99kg 是练习生会唱会跳。。。

接下来使用ES6改写一遍,得到完全相同的结果

ES6对比常规JS方式在于声明,方法,继承方面增加了语法糖
ESCabbage类
class Cabbage{
    constructor(height,weight){
        //构造器接受外部参数赋给对象的两个参数
        this.height=height;
        this.weight=weight;
        //构造器内部给对象一个岁数
        this.age=99;
    }
    //唱和跳方法
    SongAndJump(){
        console.log("身高体重是"+this.height+" "+this.weight+" 是练习生会唱会跳。。。");
    }

}
//使用原型链给对象一个性别
Cabbage.prototype.gender="Good Girl";

//白菜独有的类方法,只允许外部添加
Cabbage.beautiful=function () {
    console.log("鸡你太美。。。。")
};

//原型链外部添加rap方法
Cabbage.prototype.rap=function(){
    //引用方法
    this.SongAndJump();

    console.log("我是"+this.gender+"我喜欢rap.....");

    //引用类方法
    Cabbage.beautiful();
};

c=new Cabbage("1.8cm","100kg");
c.rap();

身高体重是1.8cm 100kg 是练习生会唱会跳。。。
我是Girl我喜欢rap.....
鸡你太美。。。。

继承类

var p=require("./EsCabbage").Cabbage;

class LickDog extends p{
    constructor(height,weight,dog){
        super(height,weight);
        //构造器内部给对象一个岁数
        this.age=99;
        //赋参
        this.dog=dog;
    }
    bark(){
        console.log("我会叫。。。"+this.dog);
    }
    lick(){
        console.log("我会舔。。。");
        this.bark();
        
        //JS中准确来说没有类的说法,继承实际上就是把父类的值给了子类,所以调用父类就是在调用自己
        //因此此处super和this调用的是一个方法
        super.SongAndJump();
        this.SongAndJump();
    }
}

dog=new LickDog("1cm","99kg","Teddy");
dog.lick();
我会舔。。。
我会叫。。。Teddy
身高体重是1cm 99kg 是练习生会唱会跳。。。
身高体重是1cm 99kg 是练习生会唱会跳。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值