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();