es6 类 继承
在es6之前,我们面向对象开发的过程中,一般是使用的构造函数
。但es6为我们提供了一个非常好用的类
,这与其它语言的类的特性
是相同的。
Class 类
//es6之前---构造函数
function Person (name){
this.name=name
}
Person.prototype.say=()=>{
console.log('good')
}
new Person('jack')
//es6之后
class Person{
constructor(name){
this.name=name
}
say(){
console.log('good')
}
}
两者是
等价
的
继承:
为什么要有继承呢?
- 减少代码的复用,减少代码量
- 更加方便地去创建一个新的且包含以前构造函数的逻辑的新构造函数!
es6之前的继承
function Person(name) {
this.name = name
}
Person.prototype.say = function () {
console.log('hello world!');
}
function Student(name, age) {
Person.call(this, name)
this.age = age
}
//原型上面的继承
Student.prototype = new Person()
console.log(new Student('jack', 19));
尽管在原型上的继承有些废渣,但是根据原型链的访问规则,不影响我们其他变量
的使用
es6 语法糖
class Person {
constructor(name) {
this.name = name
}
say() {
console.log('hello world');
}
}
class Student extends Person {
constructor(name, age) {
super(name)
this.age = age
}
say() {
super.say()
}
}
使用了extends语法糖,但原理还是跟es6
之前的一样,只不过做了一下封装!