绑定方法是否会干扰将其作为事件侦听器删除?

时间:2018-03-09 23:53:14

标签: javascript react-native

我想知道绑定方法是否会阻止将其作为侦听器删除:

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));

2 个答案:

答案 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方法,thisFoo实例界。

删除侦听器只需传递相同的实例。

// Assuming `this` is the same instance of `Foo` as above
NetInfo.isConnected.removeEventListener('change', this);