如何为实例对象绑定内部使用this关键字的自定义方法
解决方案
你的代码无法直接替换的核心原因是当前你为multiplex赋值时使用了箭头函数:箭头函数不绑定自身的this,它的this继承自外层作用域,永远不会指向当前的fakeWebSocket$$实例。
只要将箭头函数替换为普通函数表达式即可实现需求,普通函数的this会在调用时自动绑定到调用它的实例对象上:
const fakeWebSocket$$: WebSocketSubject<any> = new Subject<any>() as WebSocketSubject<any>; fakeWebSocket$$.multiplex = function(x: any, y: any, filterFn: (z: any) => boolean) { // 此处this指向fakeWebSocket$$实例 return this.pipe(filter(filterFn)); };
简化后的写法如下:
// simplified for readability fakeWebSocket$$.multiplex = function(x, y, filterFn) { return this.pipe(filter(filterFn)); };
注意事项
如果你使用TypeScript开发,可以显式声明this的类型,避免类型校验报错:
fakeWebSocket$$.multiplex = function(this: WebSocketSubject<any>, x: any, y: any, filterFn: (z: any) => boolean) { return this.pipe(filter(filterFn)); };
只要你通过fakeWebSocket$$.multiplex()的形式调用该方法,this的指向就会完全符合预期,不需要额外手动绑定。
内容的提问来源于stack exchange,提问作者NoBullsh1t
相关产品推荐
相关产品推荐

