没有新关键字可以调用构造函数吗?

时间:2019-12-05 18:15:17

标签: typescript proxy this metaprogramming decorator

我很难找到一种无需使用es6关键字即可调用new类的构造函数的方法。我知道这是不建议的,但是我的用例需要它。

在构造函数调用之前,我需要访问this。将其包装在代理中,然后将其传递给原始构造函数。以下代码有效,但仅当将打字稿构建目标设置为es5 / es3时:

const raw = Object.create(OriginalClass.prototype);
const proxied = new Proxy(raw, ...);
OriginalClass.prototype.constructor.call(proxied, args);

完全相同的代码会产生错误:

VM63:28 Uncaught TypeError: Class constructor SomeClass cannot be invoked without 'new'
    at Object.construct (eval at <anonymous> (main-3.js:1239), <anonymous>:28:49)
    at eval (eval at <anonymous> (main-3.js:1239), <anonymous>:43:24)
    at main-3.js:1239

定位到es2015或更高版本时。

对于有兴趣为什么我可能需要这样的人,here is an example。还有很多其他用例可以从诸如此类的东西中受益匪浅……例如,各种反应性库(1个简单的类级装饰器可以将所有属性自动标记为可观察到,并将所有方法标记为动作-甚至是那些懒惰/动态设置的方法) )。

0 个答案:

没有答案