【问题标题】:Electron - Why set BrowserWindow instance to null on the close eventElectron - 为什么在关闭事件中将 BrowserWindow 实例设置为 null
【发布时间】:2018-11-04 13:03:09
【问题描述】:

electron documentation,提供以下代码示例来创建新窗口:

const {BrowserWindow} = require('electron');

let win = new BrowserWindow({width: 800, height: 600});
win.on('closed', () => {
    win = null
});

win.loadURL('https://github.com');

我的问题是:为什么在收盘时将 win 设置为 null?

注意 BrowserWindow 类继承自 EventEmitter 类。 我不确定这些信息是否相关,但我认为将其包含在问题中可能会有所帮助。

请在您的回答中给出详细的解释。

提前致谢!

【问题讨论】:

    标签: javascript electron


    【解决方案1】:

    这不是强制性的,而是一种良好的编码习惯(每种语言)。

    Docs of 'closed' 更详细地提到了它:

    收到此事件后,您应该删除对 窗口并避免再使用它。

    也就是说,当您销毁一个对象时,最好将其设置为无效值,以避免对有缺陷/不完整的对象进行函数调用。

    考虑这个例子:

    const {app, BrowserWindow} = require('electron')
    let win = null
    app.once('ready', () => {
      win = new BrowserWindow()
      win.on('closed', () => {
        win = null
      })
      setInterval(() => {
        if (win) win.loadURL('http://google.com')
        else app.quit()
      }, 3000)
      app.on('window-all-closed', () => {})
    })
    

    此处正确的'closed' 回调有助于避免将来对已销毁对象的调用。


    对于 electron 的 BrowserWindow,您也可以使用 isDestroyed() 方法,这可能会使 'closed' 的使用变得不必要,但使对象无效是一种通用技术,而销毁查询始终取决于 API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2013-04-06
      • 1970-01-01
      • 2013-06-20
      • 2019-09-12
      • 2017-12-11
      • 1970-01-01
      相关资源
      最近更新 更多