我想知道绑定方法是否会阻止将其作为侦听器删除:
public final class SocketHolder implements Comparable<SocketHolder> {
private final Socket socket;
private final Datacenter dc;
private final Context context;
private final int priority;
public SocketHolder(Socket socket, Datacenter dc, Context context) {
super();
this.socket = socket;
this.dc = dc;
this.context = context;
this.priority = this.dc.getName().equals(Utils.CURRENT_DATACENTER.get().name()) ? 1 : 2;
}
@Override
public int compareTo(SocketHolder o) {
return Integer.compare(this.priority, o.priority);
}
}
和
NetInfo.isConnected.addEventListener('change', this.onConnectionChange.bind(this));
答案 0 :(得分:0)
您应该使用
绑定构造函数this.onConnectionChange = this.onConnectionChange.bind(this);
现在您只需直接发送this.onConnectionChange
作为事件监听器。
答案 1 :(得分:0)
这是添加可能有用的侦听器的另一种方法。无论this
是什么,通过向handleEvent
添加.prototype
方法,使其实现 EventListener 接口。
function Foo {
// your constructor
}
Foo.prototype.handleEvent = function(event) {
if (event.type === "change") {
this.connectionChange(event);
}
}
Foo.prototype.connectionChange = function(event) {
console.log("connection changed");
}
那么你实际上并没有将函数传递给.addEventListener
,而是传递实现接口的实例。
// Assuming `this` is an instance of `Foo`
NetInfo.isConnected.addEventListener('change', this);
现在当isConnected
触发change
事件时,它将调用对象的.handleEvent
方法,this
为Foo
实例界。
删除侦听器只需传递相同的实例。
// Assuming `this` is the same instance of `Foo` as above
NetInfo.isConnected.removeEventListener('change', this);