Is there any way for terser to minify/hoist the this variable so it does not appear repeated as often in the bundle?
Example code:
class MyClass {
constructor(handler) {
this.handler = handler;
this.handler.on('method1', this.method1.bind(this));
this.handler.on('method2', this.method2.bind(this));
this.handler.on('method3', this.method3.bind(this));
this.handler.on('method4', this.method4.bind(this));
this.handler.on('method5', this.method5.bind(this));
this.handler.on('method6', this.method6.bind(this));
this.handler.on('method7', this.method7.bind(this));
this.handler.on('method8', this.method8.bind(this));
this.handler.on('method9', this.method9.bind(this));
this.handler.on('method10', this.method10.bind(this));
}
method1() {}
method2() {}
method3() {}
method4() {}
method5() {}
method6() {}
method7() {}
method8() {}
method9() {}
method10() {}
}
new MyClass();
Ideally, I would love terser to be smart to detect repeated usages of this and hoist the reference. Something like this:
const a = this;
a.handler.on('method1', a.method1.bind(a));
// ...
What about the handler property? Perhaps it can be also smart and compress further to:
const a = this;
const h = a.handler; // (actually, `handler` because it's argument var)
h.on('method1', a.method1.bind(a));
// ...