はい、class
構文は、任意の範囲で、宣言するためおよび式の両方として使用することができる - それは(モジュール - )である必要はないトップ-レベル。
クラスを返す関数は非常に有効で、経験通り、正常に動作します。しかし、それは多くの場合、悪いIDAです:
- 生成されたクラスは、通常はお互いに非常に似ている、まだ彼らは
- 共通のスーパークラスを欠いている
extends
句で使用されている場合、それは多くの場合の不必要なレベルを紹介します継承。ポイント1に対抗するため
、あなたはすべての生成されたクラスextend
共有される1つを聞かせすることができます
(この場合は、あまりにも便利な、しかし多くの場合、良い方法ではない)
へ
class Base {
get type() {
return this.constructor.type;
}
}
const MyClassGenerator = (something) => {
class GeneratedClass extends Base {}
GeneratedClass.type = something;
return GeneratedClass
}
カウンターポイント2では、通常、生成されたものをクラスに混合するのに、extends
を使用したくないです。むしろデコレータを使用してください!
function myClassDecorator = (something, constructor) => {
Object.defineProperty(constructor.prototype, "type", {
get() {
return something;
},
configurable: true
});
return constructor;
}
let MyInheritedClass = myClassDecorator('foo', class {
...
});
新しい 'class XXX'構文は構文的な砂糖ではありませんか?もしそうなら、それはうまくいくはずです。 –