为什么我的接收者的类实例方法没有收到任何数据?

马特哈蒙德

我创建了一个基本的发射器和接收器。请你告诉我为什么当我控制台记录接收器消息时它返回一个空数组?

class Emitter {
  constructor(messages = []) {
    this.messages = messages;
    this.event = () => {};
  }
  setEvent(fn) {
    this.event = fn;
  }
  trigger() {
    this.messages.forEach(message => this.event(message));
  }
}

class Reciever {
  constructor() {
    this.messages = []
  }
  ping(message) {
    console.log(message)
    this.messages.push(message)
  }
}

const myReciever = new Reciever();
const myEmitter = new Emitter(message = ["A", "B", "C"]);

myEmitter.setEvent(myReciever.ping);
myEmitter.trigger();

console.log(myReciever.messages);

彼得·塞利格

从上面的评论...

“在setEvent编写代码时并不关心......this上下文myReciever.ping......ping被分配给一个发射器自己的event功能,立即忘记它最初属于哪里。”

除了已经建议的主动bind调用thisArg其方法的解决方案之外,还可以以一种可以或必须传递到setEvent方法的目标/上下文以及方法/函数本身的方式来调整代码trigger时间的方法,然后将这种存储的上下文中被调用...

class Emitter {
  constructor(messages = []) {
    this.messages = messages;
    this.handler = () => {};
    this.target = null;
  }
  setEvent(handler, target) {
    // `setEvent` might be better renamed to
    // `setHandler` or `assignHandler`, etc.
    this.handler = handler ?? (() => {});
    this.target = target ?? null;
  }
  trigger() {
    this.messages.forEach(message =>
      this.handler.call(this.target, message)
    );
  }
}

class Reciever {
  constructor() {
    this.messages = []
  }
  ping(message) {
    console.log(message)
    this.messages.push(message)
  }
}

const myReciever = new Reciever();
const myEmitter = new Emitter(message = ["A", "B", "C"]);

myEmitter.setEvent(myReciever.ping, myReciever);
myEmitter.trigger();

console.log(myReciever.messages);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的C ++ ZeroMQ订阅者没有收到任何数据?

为什么我的客户没有收到任何字节?

我的接收者没有收到意图

Rails 5:提交表单时我没有收到任何错误,但是我的数据没有存储在数据库中。为什么?

为什么getchar()没有收到任何输入?

为什么我没有收到任何错误在下面的代码?

为什么即使调用了异常,我也没有收到任何错误消息?

TcpListener 没有收到任何数据

为什么我没有从我的 TCP 服务器和客户端收到任何消息?

为什么我没有得到任何输出?

为什么我没有得到任何输出

为什么我没有得到任何输出

为什么我没有从JS客户端(作为Chrome扩展程序)收到任何信息?

CAPL:为什么我没有在 CAPL 中接收到 CAN 消息的数据字节?

为什么我的 Web 服务没有从我的 HTML 表单接收任何数据?

为什么我会收到任何 Java 代码的“错误:无法找到或加载主类”?

当命名类型为T的任何方法具有指针接收者时,复制类型T的实例

为什么我的 HttpPost 操作方法没有从视图中接收到 List<model>

具有接收者参数的方法是否与没有接收者参数的相同方法声明等效?

为什么我没有收到使用带 udp 套接字的 BPF 的任何数据包?

OpenWeatherMap.ORG API-$ .getJSON不起作用,我没有收到任何数据

我没有收到任何警报消息

我的片段在RecycleView中没有收到任何值

无法实例化接收者没有零参数构造函数

方法接收者

为什么不能将类型的值分配给实现带有接收者类型指针的方法的接口?

为什么我没有得到任何加速度计更新?

为什么我在Java FX中没有得到任何规模转换?

为什么我的输出文件都命名为“ part-r-xxxxx”,即使我没有提到任何reducer类也是如此?