【问题标题】:Variable simultaneously true and false变量同时真假
【发布时间】:2017-05-05 19:48:31
【问题描述】:

这是我的代码

class ToolDispatcherBlueprint extends Destroyable {
  _tool;
  _dispatchRegister = null;

  _state = {
    selectedTool: null,
    selectedElement: null,
    hoveredElement: null,
    keyboardKeyDown: null,
    keyboardKeyUp: null,
    mousedown: false,
    mouseup: true,
    mousemove: false
  };

  constructor(paper) {
    super();
    this._tool = new paper.Tool;

    let dispatchOnKeyDown = (event) => {
      this._state.keyboardKeyDown = event;
      this.dispatch(event);
    };

    let dispatchOnKeyUp = (event) => {
      this._state.keyboardKeyUp = event;
      this.dispatch(event);
    };

    let dispatchOnMouseDown = (event) => {
      this._state.mouseup = false;
      this._state.mousemove = false;
      this._state.mousedown = true;
      console.log("dispatcher", this._state.mousedown, this._state);
      this.dispatch(event);
 ...

问题是我得到一个日志,表明 mousedown 同时为真和假。我希望它表示 true 并且 _state 的属性也表示 true 即。 _state.mousedown: true

【问题讨论】:

    标签: javascript ecmascript-6 babeljs


    【解决方案1】:

    不是你想的那样。当它被打印出来时,true 就会出现。但是该对象由开发工具通过引用来保存。它仅在您展开对象时进行评估,到那时,您的 mousedown 事件已经结束。

    【讨论】:

    • 感谢您的澄清。
    【解决方案2】:

    值肯定不会同时发生变化。 console.log(this._state) 从稍后的时刻输出对象的一些快照。

    永远不要依赖对象在控制台中的显示方式。只有原始值可以被信任。如果需要输出对象的快照,将其属性一一输出或转为图元:

    console.log(JSON.stringify(this._state, null, 2))
    

    【讨论】:

    • 并不总是可行,但更好,是的。
    猜你喜欢
    • 2019-01-30
    • 2016-02-16
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2012-10-17
    • 2012-09-24
    • 2019-12-24
    • 1970-01-01
    相关资源
    最近更新 更多