这是我参与8月更文挑战的第二十七天,活动详情查看:8月更文挑战”
对于使用过基于类的语言 (如 Java 或 C++) 的开发者们来说,JavaScript 是比较费解的 —— JavaScript 是动态的,本身不提供一个 class 的实现。即便是在 ES2015/ES6 中引入了 class 关键字,但那也只是语法糖,JavaScript 仍然是基于原型的。
继承
ES5
- 首先来我们看一下在 ES 5中是如何实现继承的
function son() {
son.prototype.getName = function() {
return 'son'
}
function father() {}
let name = new father()
father.prototype = Object.create(son.prototype, {
constructor: {
name: 'father',
sex:'male',
age: '66'
}
})
- 如上代码,我们通过原型链的形式把son类的方法给了father
ES6
- ES中,我们就可以通过提供的Class关键词和
extends来实现继承
class father {
getName() {
return 'father'
}
}
class son extends father {
getName() {
return 'son'
}
}
let bigSon = new son()
bigSon.getName()
如上代码,就是通过ES6的语法来实现继承的,并重构了getName方法。
- 但是有一点是需要注意的,虽然ES6已经很普遍了,但是还有一些老旧的项目是没有继承ES6语法的,这个时候我们就需要一种编码工具,把它转换为 ES5语法了,他就是babel
那他是怎么做到的,我们可以随便找一个转译工具下看看转译后的代码。
var father = function () {
function father() {
_classCallCheck(this, father);
}
_createClass(father, [{
key: 'getName',
value: function getName() {
return 'father';
}
}]);
return father;
}();
var son = function (_father) {
_inherits(son, _father);
function son() {
_classCallCheck(this, son);
return _possibleConstructorReturn(this, (son.__proto__ || Object.getPrototypeOf(son)).apply(this, arguments));
}
_createClass(son, [{
key: 'getName',
value: function getName() {
return 'son';
}
}]);
return son;
}(father);
var bigSon = new son();
bigSon.getName();
- 通过如上代码我们可以发现,这就是ES5的 语法,但需要注意的是 他里面用到了
apply这个方法。
END~~~