es6 中的class,与js中的prototype 有什么关系
ES6 为了进一步缩减代码的简写,和简化代码的逻辑,引入了关键词class。但class的实现也是在prototype基础上的,做了一层语法糖,它的大部分功能,ES5 也能做到,新的class写法只是让对象原型的写法更加清晰,更像面向对象的编程语法,关于class,如果学过c++或者Java的人来说,比较容易理解。
class Person{
constructor((name){
this.name = name|| '';
}
toString(){
return this.name;
}
}
var pi = new Person();
console.log(p1.name);
class Boy extendPerson(){
constructor(name){
super(name);
this.gende = 'boy';
}
toString(){
return super.toString()+","+this.gende;
}
}
var b1 = new Boy('hello');
console.log(b1);
console.log(b1.toString());
ES5的继承,也就是prototype的实质是先创造子类的实例对象this,然后将父类的方法添加到this上。
ES6 的继承,也就是class,实现创造父类的实例对象this,然后在用子类的构造函数修改this,它们的实现机制是不同的,ES5和ES6 一样,类的所有实例共享一个原形对象。