JavaScript函数调用上下文具有有效参数,但函数未获取这些参数

ikfrs5lh  于 2023-02-21  发布在  Java
关注(0)|答案(1)|浏览(113)

在使用回调的自定义事件处理设置中,回调的调用上下文显示回调参数的有效值,但在单步执行函数后未定义参数值。
如果有关系,这是在使用React的电子渲染器进程内部。
在普通JavaScript对象中,调试器显示回调报告SerialPortEvent.Opened行中所有内容的预期上下文值。

// file: serialPort.js (no imports)
class SerialPortEvent {
  Discovered = 0
  Opened = 1
  Closed = 2
  DataReceived = 3
  Error = 4
}

class SerialPortSpec {
...
  addEventListener(listener) {
    this.listeners.push(listener)
  }

  open(baudRate) {
    const baudRateInt = parseInt(baudRate, 10)

    window.serialport.open(this.portInfo.path, baudRateInt)
      .then(binding => {
        this.baudRate = baudRateInt
        this.binding = binding

        // Here, the debugger shows all locals are as expected

        this.listeners.forEach(listener => listener(SerialPortEvent.Opened))
      }).catch(reason => {
        this.listeners.forEach(listener => listener(SerialPortEvent.Error, reason))
      })
  }
...
}

...

module.exports = { SerialPortEventHub, SerialPortSpec, SerialPortEvent }

然而,一个“步入”之后,在回调函数“portEventHandler”的开头,参数值是undefined。我很想知道为什么!谢谢。

// file SerialPortUI.jsx

import React from 'react'
import { SerialPortEventHub, SerialPortEvent, SerialPortSpec } from './serialPort'
import './serialportui.css'

class SerialPortPanel extends React.Component {
...
  portEventHandler(eventType, ...data) {
    // Here, eventType is undefined. This file does import SerialPortEvent.
    switch (eventType) {
      ...
    }
  }
...
}
ffx8fchx

ffx8fchx1#

class SerialPortEvent {
  Discovered = 0
  Opened = 1
  Closed = 2
  DataReceived = 3
  Error = 4
}

这不是一个正确的枚举声明,类字段将在示例上创建,你在代码中访问的静态类属性SerialPortEvent.Opened实际上是undefined,这就是被调用函数接收的值。
相反,您需要使用具有属性的对象:

const SerialPortEvent = {
  Discovered: 0,
  Opened: 1,
  Closed: 2,
  DataReceived: 3,
  Error: 4,
};

如果你从来没有示例化过class语法,就不要使用它(使用new)!

相关问题