ES6:class的定义与继承,从ES5转换成ES6
时间: 2023-12-21 15:03:57 浏览: 212
在ES6中,我们可以使用class关键字来定义一个类,同时也可以使用extends关键字来实现继承。下面是一个使用ES6语法定义和继承类的示例代码:
```
// 定义一个父类
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
// 定义一个子类,继承自父类Animal
class Dog extends Animal {
constructor(name) {
super(name); // 调用父类的constructor方法
}
speak() {
console.log(`${this.name} barks.`);
}
}
const d = new Dog('Mitzie');
d.speak(); // 输出 "Mitzie barks."
```
以上代码中,Animal类是一个父类,其构造函数接受一个name参数,并定义了一个speak方法。而Dog类则继承自Animal类,并且覆盖了speak方法,以实现不同的行为。
如果你想把以上代码从ES5转换成ES6,可以使用一些工具,如Babel等,将其转换成ES6语法。例如,以下是使用ES5语法定义和继承类的示例代码:
```
// 定义一个父类
function Animal(name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log(this.name + ' makes a noise.');
};
// 定义一个子类,继承自父类Animal
function Dog(name) {
Animal.call(this, name);
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.speak = function() {
console.log(this.name + ' barks.');
};
var d = new Dog('Mitzie');
d.speak(); // 输出 "Mitzie barks."
```
以上代码中,Animal类是一个父类,其构造函数接受一个name参数,并通过原型链定义了一个speak方法。而Dog类则继承自Animal类,并使用Object.create()方法来创建一个新的对象,并将其原型设为Animal.prototype,以实现继承。同时,需要手动设置Dog.prototype.constructor属性,以确保其指向正确的构造函数。最后,覆盖原型上的speak方法以实现不同的行为。
阅读全文