ES6 class,与js prototype原型继承有何关系?
2018-03-06 13:47
357 查看
ES6为了进一步的缩减代码的编写,和简化代码的逻辑,引入了关键词 class。但class的实现也是在prototype的基础上,做了一层语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
class Person {
constructor(name) {
this.name=name||"Default";
}
toString(){
return 'Name:'+this.name;
}
}
var p1=new Person();
console.log(p1.name);
class Boy extends Person{
constructor(name){
super(name);
this.gende='Boy';
}
toString(){
return super.toString()+" - Gende:"+this.gende;
}
}
var b1=new Boy('hello');
console.log(b1);
console.log(b1.toString());
ES5的继承,也就是prototype
实质是先创造子类的实例对象this
然后再将父类的方法添加到this上面(Parent.apply(this))
ES6的继承,也就是class
实质是先创造父类的实例对象this(必须先调用super)
然后再用子类的构造函数修改this
它们的实现机制是不同的
ES6与 ES5 一样,类的所有实例共享一个原型对象
对于es6这一块,还是很有必要去读一读 文档的
原文链接:https://www.jianshu.com/p/fc4c2d8a0018
class Person {
constructor(name) {
this.name=name||"Default";
}
toString(){
return 'Name:'+this.name;
}
}
var p1=new Person();
console.log(p1.name);
class Boy extends Person{
constructor(name){
super(name);
this.gende='Boy';
}
toString(){
return super.toString()+" - Gende:"+this.gende;
}
}
var b1=new Boy('hello');
console.log(b1);
console.log(b1.toString());
ES5的继承,也就是prototype
实质是先创造子类的实例对象this
然后再将父类的方法添加到this上面(Parent.apply(this))
ES6的继承,也就是class
实质是先创造父类的实例对象this(必须先调用super)
然后再用子类的构造函数修改this
它们的实现机制是不同的
ES6与 ES5 一样,类的所有实例共享一个原型对象
对于es6这一块,还是很有必要去读一读 文档的
原文链接:https://www.jianshu.com/p/fc4c2d8a0018
相关文章推荐
- 04面向对象编程-02-原型继承 和 ES6的class继承
- ES6学习——生成器(Generators):原型继承关系详解
- javascript中的原型与继承6--class的继承
- js prototype 原型继承问题
- ES6学习——类语法:继承中的原型链
- 在JavaScript中模拟类(class)及类的继承关系
- 从ES6中的extends讲js原型链与继承
- 深入Spring Boot之ClassLoader的继承关系和影响
- ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
- ES6 —(Class 的继承)
- 关于ES5中的prototype与ES6中class继承的比较
- ES6 class的继承使用细节
- [jvm解析系列][六]class里的常量池,访问标志,类的继承关系,如何把一个类在字节码中描述清楚?
- es6 javascript的Class 类的继承
- ES6 之 class 继承
- JavaScript面向对象编程之class继承(ES6新特性)
- 049. isKindOfClass 检查继承关系
- javascript中的__proto__和prototype,以及ES6中class的原型相关
- hibernate继承关系的映射(single_table,class_per_table,joined)
- 编译期检查class是否有继承关系