Class类用法
传统方式构造函数,它的缺点在于,和普通函数一样,不利于区分,普通执行会产生全局变量,所以在es6提出了Class类的概念
function Person(name, age = 0) {
this.name = name
this.age = age
this.say = function(){
console.log(this.name,this.age)
}
}
var person = new Person('zhangsan')
person.say() //zhangsan 0
每个Class类构造函数都有一个constructor函数
class PersonA {
constructor(name,age = 0){
this.name = name
this.age = age
}
say(){
console.log(this.name,this.age)
}
}
var personA = new PersonA('zhangsan',18)
personA.say() //zhangsan 18
console.log(typeof personA) //function --> 语法糖 糖衣语法
其实Class类构造函数里写的函数(只要不和constructor重名就行)是写在原型上的,而传统构造函数则不是,不信的话请看,区别显而易见
console.log(personA.say===PersonA.prototype.say) //true
console.log(person.say===Person.prototype.say) //false
Class类构造函数必须通过new操作符进行实例化,否则会报错
Class类继承
直接上代码
class PersonB extends PersonA{
constructor(name,age){
super(name,age) //super 函数 代表调用父类构造函数
this.like = 'banner'
}
say(){
console.log(this.like) //banner
console.log(super.say()) // ha 30 -->super 对象 代表代表父类的原型 this 自动绑定子类
}
}
var personB = new PersonB('ha',30)
console.log(personB) //ha 30
其实你会发现它比之前的圣杯模式继承会更简单,直观,这里多了两个关键字extends和supper,extends是Class类函数要继承至父类构造函数要用extends,而subber如果当函数使用代表调用父类构造函数,如果当对象使用代表父类的原型,同时具有自动绑定子类的功能