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?
N.B。 BrowserWindow类继承自班级EventEmitter。 我不确定这些信息是否相关,但我认为将其纳入问题可能会有所帮助。
请详细解释你的答案。
提前致谢!
答案 0 :(得分:2)
它不是强制性的,而是一种良好的编码习惯(用于所有语言)。
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'
回调有助于避免将来对被破坏对象的调用。
对于电子BrowserWindow
,你也可以使用isDestroyed()
方法,这可能会使'closed'
不必要但无效的对象是一种通用技术,而破坏查询总是直到API。