JS继承

历史

Javascript的继承在历史上产生过很多解决方案,我感觉主要分成两类,一个是基于原型链的,另一个是基于拷贝的。下面罗列了一些文章,都是我觉得说的很清楚,很牛逼的文章,感兴趣的同学可以看看。

中文博客
Javascript面向对象编程(二):构造函数的继承
Javascript面向对象编程(三):非构造函数的继承
对《JavaScript高级程序设计》第三版6.3小节的理解
JavaScript继承详解

外文博客
Douglas Crockford - Prototypal Inheritance in JavaScript
Douglas Crockford - Classical Inheritance in JavaScript
John Resig - Simple JavaScript Inheritance
Dean Edwards - A Base Class for JavaScript Inheritance
Prototype

外国框架,支持AOP:
https://github.com/tnhu/jsface

国人实现的一个继承,支持private,protected,static
https://github.com/yuehaowang/jpp.js


ES2015

class语法糖

ES2015提供了新的语法糖来实现类和继承。看一个例子:

class SponsorWidget {
    constructor(name, description, url) {
        this.url = url;

    }
    
    render() {
        //...
        let link = this._buildLink(this.url);
    }

    _buildLink(url) {
        //...
    }
}
JS继承_第1张图片
新语法
JS继承_第2张图片
新语法

继承

看一个例子

class Widget {
    constructor() {
        this.baseCSS = "site-widget";
    }
    parse(value) {
        //...
    }
}


class SponsorWidget extends Widget {
    constructor(name, description, url) {
        super();
    }

    render() {
        //...
        let parsedName = this.parse(this.name);
        let css = this._buildCSS(this.baseCSS);
    }

    parse() {
        let parsedName = super.parse(this.name);
        return `Sponsor: ${parsedName}`;
    }
}
JS继承_第3张图片
新的继承

总结

经历漫长的发展,JavaScript取得了很大的进步,ES2015增加了很多新的思想,统一了以前让大家混乱不堪的概念,作为程序员,我们应该与时俱进,使用新的标准进行前后端的开发。

你可能感兴趣的:(JS继承)