为什么箭头函数不能在 electron 的引用脚本中工作?

Why don't arrow functions work in a referenced script in electron?

Quick Disclaimer: I'm only very vaguely familiar with html and javascript; I never do any web development. I'm learning electron because it seems like a novel approach to gui programming.


我正在学习如何使用 Electron,同时也在学习不同的 javascript 库,例如 jQuery 和 bootstrap。我目前正在通过链接页面上的 w3schools. In the example 处理 jQuery 他们使用匿名函数编写脚本。很酷,但我想使用箭头函数语法。

现在,我不太了解他们的交互式浏览器环境,但我在自己的环境中设置了相同的示例。不同之处在于我使用 electron 来显示页面,并且我正在链接一个脚本而不是在 index.html 中编写它。即在我的 head 标签下我有

 <script src="./script.js"></script>

script.js看起来像这样

let $ = require('jquery')

$(document).ready(() => {
    $('p').click(() => {
        $(this).hide()
    })
})

main.js 看起来像这样

const {app, BrowserWindow} = require('electron')
const url = require('url')
const path = require('path')

app.on('ready', () => {
    let win = new BrowserWindow({width: 800, height: 600})
    win.loadURL(url.format({
        pathname: path.join(__dirname, 'index.html'),
        protocol: 'file:',
        slashes: true
    }))
})

当我 运行 electron ./main.js 时,当您单击任何 <p> 项目时,您会认为它们会消失,但它们不会。但是,如果我将 script.js 中的所有箭头函数改回旧的匿名函数语法,一切都会按预期进行。

我不明白为什么会这样,因为 main.js 中有箭头函数,而且它工作得很好。引用使用 ES6 标准的脚本时,我需要做一些额外的步骤吗?还是 electron 发生了什么奇怪的事情?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

箭头函数,根据其定义,不会为与普通函数关联的各种变量赋值,其中之一是 this

箭头函数表达式的语法比函数表达式更短,并且没有自己的 this、arguments、super 或 new.target

有两种方法可以解决这个问题。首先,使用将值赋给 this 的普通函数。或者,您可以将事件传递给事件处理程序并从中访问元素。

$('p').on('click', e => $(e.target).hide())