美文网首页Web 前端开发
深入浅出ES6教程『类和继承』

深入浅出ES6教程『类和继承』

作者: 苏日俪格 | 来源:发表于2018-06-07 10:55 被阅读9次

大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了模块化的用法,下面我们一起来继续学习类和继承:

关于类的概念我想大家都很熟悉了,在面向对象编程的时候需要用到类,那么ES5以及之前的写法来模拟类,这种做法很粗糙,毕竟是从Java语言中引过来的:

function Person(name){
    this.name = name;
}
Person.prototype.showName = function(){
    return this.name;
};
var p1 = new Person('苏日俪格');
console.log(p1.showName());  // 苏日俪格

那么在我们ES6中,就不会这么粗糙了:

class Person{  // Person类  它也是一个函数
    constructor(name){  // 构造函数
        this.name = name;
    }
    showName(){
        return this.name;
    }
}
var p1 = new Person('苏日俪格');
console.log(p1.showName());  // 苏日俪格

constructor的中文意思就是构造,他在这里代表的就是构造函数,那么class是一个类也是一个函数,只不过ES6标准是把这个函数包装成了一个class的写法而已,在new一个实例的时候,构造函数自动执行。

在写类的过程中,有一点需要注意:class没有预解析,实例化一定要放在下面;在ES5里面用函数来模拟类就可以,因为函数是有提升的功能的

关于ES6中类的新玩法我们已经掌握,那么类的继承的玩法是不是也变了呢?
让我们对比一下,先来看看以前的写法:

function Person(name){  // 父类
    this.name = name;
}
Person.prototype.showName = function(){
    return this.name;
};
function SubPerson(name,job){  // 子类
    Person.call(this,name);  // 子类继承父类的属性 需要将this指向父类中的name
    this.job = job;  // job是子类自己的属性
}
SubPerson.prototype = new Person();  // 子类继承父类的方法
var p1 = new SubPerson('苏日俪格');
console.log(p1.name);  // 苏日俪格
// console.log(p1.showName());  // 苏日俪格

再来看看现在的写法:

class Person{
    constructor(name){
        this.name = name;
    }
    showName(){
        return this.name;
    }
}
class SubPerson extends Person{
    constructor(name,job){
        super(name);    // 指向父类的构造函数
        this.job = job;
    }
    showJob(){
        return this.job;
    }
}
var p1 = new SubPerson('苏日俪格','前端开发');
console.log(p1.name);  // 苏日俪格
// console.log(p1.showName());  // 苏日俪格
// console.log(p1.job); // 前端开发

玩过java的都应该知道,extends就代表这继承的意思,super就是指向父类的构造函数,指代了整个prototype对象或者_proto_指针指向的对象,在ES6里面呢也是相同的意思,可以省去不少代码和原型链的过程

如果在子类中也写入showName方法,和父类中的方法重名,这样就会覆盖父类的,倘若不想覆盖而是想引用父类的showName方法,那么就在子类的showName方法中通过super来调用父类的showName:super.showName

关于类和继承我们都已经了然于心,预知Symbol & generator如何,请听下回分解 (^∀^)/~~~

本文的所有内容均是一字一句敲上去的,希望大家阅读完本文可以有所收获,因为能力有限,掌握的知识也是不够全面,欢迎大家提出来一起分享!谢谢O(∩_∩)O~

github个人主页:https://github.com/YuFy1314
我的博客:http://www.cnblogs.com/yufy/
Resume:https://yufy1314.github.io/
等一下( •́ .̫ •̀ ),我还有最后一句话:
这里虽然没有都市的繁华,
也没有山林的鸟语花香,
只有一片如水的宁静,
古人云:
既来之则安之,
既然来到了这里,
就可以静心休憩你的灵魂,
调养你疲惫的心,
再见...

相关文章

  • 深入浅出ES6教程『类和继承』

    大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了模块化的用法,下面我们一起来继续学习类和...

  • 继承

    老版继承 call () ES6继承 extends 继承super 超类/父类

  • JS中类的继承封装和多态

    子类继承父类的属性和方法(原生继承,call继承,寄生组合继承,ES6中class类继承)原生继承:让子类的原型指...

  • react组件

    es6 的class类的继承 运用es6 class继承 通过继承React.Component类来定义一个组件

  • (七)class

    类的继承 类的继承和封装 类必须有构造函数这个属性 上面那个是ES6写法,写一下注释 类的继承和封装

  • javascript之模拟类继承

    前言 ES6时代的来临,使得类继承变得如此的圆滑。但是,你有思考过ES6的类继承模式吗?如何去实现它呢? 类继承对...

  • JS -- 继承、性能优化、其他

    继承作用:让子类具有父类的各种属性和方法(类和类的关系) (在es6之前,js没有类的概念,所以不叫继承,一般称为...

  • es5 es6静态方法、类、单例模式

    es5中的类和静态方法 es5继承 es6中的类 es6里面的继承 es6里面的静态方法 es6单例模式 转载:h...

  • 你不知道的ES5和ES6继承

    ES5继承和ES6继承的区别,在ES6还没有发布的时候 ,js定义类是以函数的形式,例如 function Te...

  • ES6类和继承

    首先看代码 此处,调用new的时候就自动执行了构造函数,所以接收参数也是在构造函数出接收 此处函数不会自动执行,只...

网友评论

    本文标题:深入浅出ES6教程『类和继承』

    本文链接:https://www.haomeiwen.com/subject/bzmbsftx.html