class曼妙身姿
class Person {
constructor(name){
this.name = name;
}
//普通函数
say(){
console.log(name)
}
//存值函数和取值函数
get getName(){
return name;
}
set setName(val){
this.name = val;
}
//generator函数
*hello(){
yield 'world'
}
//静态函数
//该方法不会被实例继承,可被子类继承,this指向类
static method(){
return 123;
}
//实例属性
age = 18;
//静态属性
static age = 20;
}
class的蔓延
在es5的继承
原型链的继承
myintance.prototype = new person();
构造函数的继承
myintance(){
Person.call(this)
}
在es6的继承
class myintance extends Person{
construtor(){
super() //必须调用super(),本质是对父类构造函数的调用和继承,里面的this指向myinstance实例调用之后子类才可以使用this对象;
}
}
super的两大作用,一个做函数使用,一种是作对象使用;
函数使用时,实质代表父类的构造函数,super内部的this指向子类;
作为对象使用时,代表父类的原型对象,在调用静态方法时,指向父类;1、通过super调用父类原型对象的属性和方法;2、调用普通方法时,里面的this是指向子类;3、给属性赋值时,super.x = 3,这时super指向子类实例;4;调用静态方法时,指向父类本身。
class的prototype属性和_proto_属性
class作为语法糖,同时具有prototype属性和_proto_属性
当作为对象理解时,class的_proto_属性指向父类,即myintance.proto = Person;
当作为构造函数理解时,class的prototype属性指向父类的实例,即myintance.prototype.proto = Person.prototype,也可理解为父类的实例的_proto_指向父类的原型。