在JavaScript中绑定到原始的

时间:2015-05-27 14:08:04

标签: javascript

我有一个如下对象:

{ except: player => ({ send :player.getSocket().broadcast.emit }) }

但是这意味着emit函数中的this不是它期望的那个(broadcast对象)。

所以我能做到:

{ except: player => ({ send : (msg, data) => player.getSocket().broadcast.emit(msg, data) }) }

但这很难看,尤其是如果论点发生变化的话。 所以替代方案是:

{ except: player => ({ send : (t = player.getSocket().broadcast).emit.bind(t) }) }

但这样做是否有一种更为简洁的方法,即将一个函数分配给一个对象,同时保持它的this作为它的父对象。

2 个答案:

答案 0 :(得分:0)

您可以通过applycall调用该功能来指定this的用户。这些方法的第一个参数是函数体内的this

答案 1 :(得分:0)

使用bind来维护this的范围实际上是一个很好的解决方案,我看到它的方式,它使代码更容易理解,因为你可以知道什么当你读取你不知道函数/方法属于apply的代码时,使用callthis对函数实际所属的对象。据我所知,bind可以很好地解决您的问题。