是,class
語法既可用於聲明和表達式中使用,在任何範圍內 - 它並不需要是(基於模塊)頂部-水平。
返回類的函數非常有可能,並且按照您的預期工作。然而,這往往是一個壞IDA:
- 生成的類通常是相當彼此相似,但它們缺乏通用超
- 如果在
extends
子句使用時,它常常引入的不必要的電平遺產。
爲了應對1點,就可以讓所有生成的類extend
共享一個:
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'語法只是語法糖?如果是這樣,它應該工作。 –