【问题标题】:Uncaught ReferenceError: x is not defined未捕获的 ReferenceError:未定义 x
【发布时间】:2017-10-07 02:19:23
【问题描述】:

不断收到未捕获的引用错误:'message' is not defined , 这是代码:

   class ChatApp {
  constructor(){
    //console.log('ChatApp constructor');
    socket.init('ws://localhost:8000');
    socket.registerOpenHandler(() => {
      let message = new ChatMessage({ message: 'Hello' });
      socket.sendMessage(message.serialize());
    });
    socket.registerMessageHandler((data) => {
      console.log(data);
    });
  }
}

class ChatMessage {
  constructor({
    message: m,
    user: u='Nader',
    timestamp: t=(new Date()).getTime()
  }) {
    this.message = message;
    this.user = user;
    this.timestamp = timestamp;
    console.log(message);
  }
  serialize(){
    return {
      message: this.message,
      user: this.user,
      timestamp: this.timestamp

    };
  }
}

虽然我在第 5 行使用 let message ... 定义了消息。 请帮忙,谢谢

【问题讨论】:

  • 你知道你在解构过程中重命名了吗?这是m 而不是message
  • usertimestamp 相同。
  • @Andrew Li 你说得对

标签: javascript ecmascript-6 undefined referenceerror


【解决方案1】:

如果我理解正确,您的构造函数将您的类值设置为等于类型而不是传递的值。

【讨论】:

  • 请参阅@Sajeetharan 了解我所指的内容。
【解决方案2】:

您使用了错误的变量名,请使用您在构造函数中传递的内容,

 this.message = m;
 this.user = u;
 this.timestamp = t;
 console.log(message);

【讨论】:

  • 感谢 Sajeetharan,错误现在出现在第 19 行:消息:m,(未捕获的类型错误:无法读取未定义的属性“消息”)
【解决方案3】:

问题在于您的 ChatMessage 构造函数。键被重命名为单个字符,但它们没有在构造函数的主体中使用。

应该是:

constructor({
    message: m, 
    user: u='Nader',
    timestamp: t=(new Date()).getTime()
  }) {
    this.message = m; 
    this.user = u;
    this.timestamp = t;
  }

【讨论】:

  • 你说的完全正确,我做到了,效果很好
猜你喜欢
  • 1970-01-01
  • 2014-08-04
  • 2023-01-23
  • 2016-11-03
  • 2011-01-05
  • 2016-01-02
  • 2013-10-06
  • 2016-12-17
相关资源
最近更新 更多