2
我該如何重寫一個ES7類裝飾器的構造函數?用類裝飾器覆蓋構造函數?
例如,我想有這樣的:
@injectAttributes({ foo: 42 })
class Bar {
constructor() {
console.log(this.foo);
}
}
凡injectAttributes
裝飾將注入到屬性的新實例被創建之前:
> bar = new Bar();
42
> bar.foo
42
顯而易見的解決方案 - 使用不同的構造函數:
function overrideConstructor(cls, attrs) {
Object.assign(this, attrs);
cls.call(this);
}
不起作用b ecause創建將成爲新構造的一個實例,而不是原始類型的對象:
> bar = new overrideConstructor(Bar, {foo: 42})
42
> bar
[overrideConstructor {}]
> bar instanceof Bar
false
ES7中沒有裝飾器。 – Bergi
_「不適用,因爲創建的對象將是新構造函數的實例,而不是原始類型」_沒有「原始類型」。 「酒吧」是裝飾的結果。或者更確切的說,因爲JavaScript中沒有裝飾器。 – zeroflagL