Electron - 为什么在关闭事件上将 BrowserWindow 实例设置为 null

Mag*_*ged 3 javascript electron

电子文档,提供了以下示例代码来创建一个新的窗口:

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

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

win.loadURL('https://github.com');
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么在 close 事件中将 win 设置为 null?

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

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

提前致谢!

per*_*rgy 5

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

“关闭”的文档更详细地提到了它:

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

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

考虑这个例子:

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', () => {})
})
Run Code Online (Sandbox Code Playgroud)

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


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