ES6 中的 类 和 继承

ES6 继承 (逼格最高,也是未来的趋势,必学必用)

知识点:

class 类

ES6给我们提供了class的语法糖,可以通过class来创建类
class Person { 
 // 私有属性,只能被类内部调用,无法被实例使用比如:`p.#job` 会报错
    #job = "工人"

    constructor(name, age){ // 可以进行传参
        this.name = name; // 构造函数的 this 会指向实例。
        this.age = age;
    }

 // 加了 # 修饰符,称为 私有属性和方法,对象外部无法访问的属性和方法,比如说:(不能用 Person.privateFn() 或者 p.privateFn() 来调用,)
 // 等同于 `let privateFn = function(){}`的定义方式
    #privateFn2(){
        console.log('私有方法2');
    }

 // 加了 static 关键字,称为静态方法,只有类自身可以调用(Person.staticFn() 来调用),实例无法使用(p.staticFn() 会报错)。
    static staticFn(){
        console.log('静态方法');
    }
  
 // 动态方法,给实例使用的方法,相当于把方法挂在原型上:`Person.prototype.say = function(){console.log(this.name)}`,不能用类直接调用(Person.say() 报错)
    say(){
        console.log(this.name, `的父级的工作是:${this.#job}`);
    }
};

let p = new Person('成龙',20);
p.say(); // 成龙 的父级的工作是:工人

声明子类 extends 父类名 就继承父类了

class Coder extends Person {
    /*
        在子类constructor中添加属性的小技巧
        专属于子类的属性写在参数的前面,父类的属性放在后面
        这样一来,就能直接使用...arg
        ...arg
            把函数中的多余的参数放入数组中体现出来。
    */
    constructor(job, ...arg){
        // console.log(this)
        super(...arg); // 等同于调用父类,把多余的参数(和父类一样的属性)放到super中,达到继承父类属性的目的
        /*
            在继承里,写constructor必须写super
            super下面才能使用this,super有暂存死区(super上面不能使用this,用了就报错)
        */
        this.job = job;//自己私有的属性,直接this点即可
        console.log(arg);
    }
    codeing(){
        console.log('敲代码');
    }
    say(){
        console.log('哈哈');
    }
}
let c = new Coder('前端','周杰伦',20);
let p = new Person('张杰',30);
// delete c.name;
console.log(c);
// c.say();
// p.say();
// c.codeing();
posted @ 2018-11-09 23:12  真的想不出来  阅读(737)  评论(0编辑  收藏  举报