2JavaScript设计模式--class/extends

版权声明:本文为作者的原创文章,未经允许不得转载。 https://blog.csdn.net/lin5165352/article/details/81571872

面向对象编程的三要素:继承、封装、多态。

ES6语法 类 class

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

class Person {
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    eat(){
        alert( `${this.name} eat something`);
    }
    spake(){
        alert(`My name is ${this.name},age ${this.age}`);
    }
}
let zhang = new Person("zhang san",20);
zhang.eat();
zhang.spake();

let wang = new Person("王五",21);
wang.eat();
wang.spake();

继承 extends
super:调用父类的构造函数和方法。

class People {
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    eat(){
        alert( `${this.name}在吃东西`);
    }
    spake(){
        alert(`我的名字是${this.name},年龄${this.age}`);
    }
}

class Student extends People{
    constructor(name,age,number){
        super(name,age);
        this.number = number;
    }
    study(){
        alert(`${this.name}在学习`);
    }
}

let xiaoming = new Student("小明",19,8001);
xiaoming.study();
alert(`小明的学号是${xiaoming.number}`);
xiaoming.eat();

let xiaohong = new Student("小红",17,8002);
xiaohong.eat();
xiaohong.spake();

TypeScript语法

ES6不支持 class 中的 public、private、protected 修饰符。
但是TS支持,可以在TS中演示一下。左边22行代码,右边35行,而且右边的可读性很差。这就是TS的优势。
在线编译地址:http://www.typescriptlang.org/play/index.html

class Person{
    public name: string="无名";
    constructor(public age:number,public num:number) {
        
    }
    protected price: number;
}

class Men extends Person{
    constructor(age,num,public high:number) {
        super(age, num);
    }
    speak() {
        alert(`名字${this.name},年龄${this.age},编号${this.num},身高${this.high}`);
    }
}

let m1 = new Men(23, 111, 180);
m1.name = "张三";
m1.speak();
let m2 = new Men(20, 110, 170);
m2.speak();

猜你喜欢

转载自blog.csdn.net/lin5165352/article/details/81571872