ES6 中新增的类的概念
2021-01-31 本文已影响0人
F_wind
《深入理解ES6》阅读随笔
在 ES5 之前,JavaScript 中一直没有类的概念,在实际应用场景中,可以通过构造函数的方式来实现类的功能。下面是一个例子:
// ES5
function Cat(name) {
this.name = name;
}
Cat.prototype.running = function () {
console.log(this.name + " is running!");
};
var cat = new Cat("Tom");
cat.running(); // Tom is running
console.log(typeof Cat); // function
console.log(typeof Cat.prototype.running); // function
在 ES5 中,我们可以创建一个构造函数 Cat,然后定义一个 running 方法,赋值给 Cat 的原型;如此这般,就实现了一个简单的类似类的功能。
在 ES6 中,正式新增了声明类的办法:
// ES6
class Dog {
constructor(name) {
this.name = name;
}
running() {
console.log(this.name + " is running!");
}
}
const dog = new Dog("Wangcai");
dog.running(); // Wangcai is running
console.log(typeof Dog); // function
console.log(typeof Dog.prototype.running); // function
通过关键字 class 声明类,自有属性都放在新的 constructor 中,新增方法不再借助原型,而是直接在类中定义即可。
我们发现,新的类以及类中原型上的方法,类型依然是 function,与原来 ES5 的实现保持一致。事实上,新的 class 方式是原来构造函数实现的一个语法糖,原理是一样的。