创建一个白菜,白菜可以唱,跳,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 是练习生会唱会跳。。。