class a { f() { console.log('a') } get f2() { console.log('f2') return (this['f'] = this.f.bind(this)); } } class b extends a { constructor() { super() this.f = this.f.bind(this) } f() { console.log('b') super.f2(); } get f2() { return (this['f'] = this.f.bind(this)); } } let instance = new b(); instance.f2(); // for (var i = 0; i < 5; ++i) { // console.log('invoking'); // instance.f2(); // console.log('---'); // }
class a { // constructor() { // this.f2 = this.f.bind(this); // } f() { console.log('a') } f2() { // console.log(this) console.log('f2') if (!this.f3) { this.f3 = this.f.bind(this); } return this.f3 } } class b extends a { // constructor() { // super() // this.f = this.f.bind(this) // } constructor() { super(); this.f2 = this.f.bind(this); } f() { console.log('b') super.f2(); this.f2 = this.f.bind(this); } // get f2() { // console.log(this) // return (this['f'] = this.f.bind(this)); // } } let instance = new b(); instance.f2(); for (var i = 0; i < 5; ++i) { console.log('invoking'); instance.f2(); console.log('---'); }
https://github.com/jayphelps/core-decorators/pull/21
https://github.com/jayphelps/core-decorators/blob/master/src/autobind.js
https://github.com/jayphelps/core-decorators/issues/20 autobind用weakmap的原因