我很难找到一种无需使用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个简单的类级装饰器可以将所有属性自动标记为可观察到,并将所有方法标记为动作-甚至是那些懒惰/动态设置的方法) )。