历史
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) {
//...
}
}
继承
看一个例子
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}`;
}
}
总结
经历漫长的发展,JavaScript取得了很大的进步,ES2015增加了很多新的思想,统一了以前让大家混乱不堪的概念,作为程序员,我们应该与时俱进,使用新的标准进行前后端的开发。