【发布时间】:2016-08-13 22:32:58
【问题描述】:
由于 ECMAScript 6 中的类只是 JavaScript 现有的基于原型的继承的语法糖,仍然可以使用 EMCAScript 5 语法“扩展”(因为没有更好的词)现有类的原型并添加方法到它甚至在一个完全独立的文件中的类声明之后。
/* Dog.js */
class Dog {
woof() {
console.log('woof woof');
}
}
module.exports = Dog;
/* main.js */
var Dog = require('./Dog');
Dog.prototype.bark = function() {
console.log('bark bark');
};
var dog = new Dog();
dog.woof(); // 'woof woof'
dog.bark(); // 'bark bark'
有没有办法实现与上述相同的功能,但在 main.js 中保持 ECMAScript 6 类语法,而不是回到原型语法?尝试诸如 class Dog extends Dog 之类的操作会引发错误,因为 Dog 类已被声明。
请注意,这不是继承意义上的扩展,因为这需要创建一个新类,而不是向现有类添加方法。
class Dog {
woof() {
console.log('woof woof');
}
}
class AdvancedDog extends Dog {
bark() {
console.log('bark bark');
}
}
var dog = new Dog();
dog.woof(); // 'woof woof'
dog.bark(); // Error, not what is needed.
【问题讨论】:
-
并非如此。
extends表示新类将继承旧类的所有内容,它不会使用新属性扩展旧类。为此,您必须使用新属性“扩展”对象或原型。
标签: javascript syntax ecmascript-6