ECMAScript 6のクラスは、JavaScriptの既存のプロトタイプベースの継承より構文的に単純なものであるため、既存のプロトタイプを「拡張」することができますクラスをEMCAScript 5構文で置き換え、クラス宣言の後でも完全に別のファイルにメソッドを追加します。ECMAScript 6のプロトタイプを拡張するための構文
/* 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'は、新しいクラスが古いクラスにあるものすべてを継承することを意味し、古いクラスを新しいプロパティで拡張しないことを意味します。そのためには、オブジェクトを新しいプロパティで「拡張する」必要があります。 – adeneo