javascript - 当给定私有变量作为参数时,Path.join 抛出异常
问题描述
我正在尝试使用 Electron,我正在尝试加载一个 html 文件,并将该文件的路径存储在一个私有变量中。请参阅下面的代码。
但是 Path.join 失败并出现此错误:
但是,如果我传递具有相同值的字符串文字,它就可以工作。
非工作代码:
import * as Electron from 'electron'
import * as Path from 'path'
import { Option, Some, None } from './option'
export default class Main
{
private indexFilePath = 'index.html'
private app: Electron.App
private browserWindow: Option<Electron.BrowserWindow>
constructor (app: Electron.App)
{
this.app = app
this.browserWindow = new None()
this.app.on('ready', this.onReady)
}
private onReady(): void
{
this.browserWindow = new Some(new Electron.BrowserWindow({
width: 800,
height: 600
}))
this.browserWindow.unwrap().loadFile(Path.join(__dirname, this.indexFilePath))
}
}
工作代码:
import * as Electron from 'electron'
import * as Path from 'path'
import { Option, Some, None } from './option'
export default class Main
{
private app: Electron.App
private browserWindow: Option<Electron.BrowserWindow>
constructor (app: Electron.App)
{
this.app = app
this.browserWindow = new None()
this.app.on('ready', this.onReady)
}
private onReady(): void
{
this.browserWindow = new Some(new Electron.BrowserWindow({
width: 800,
height: 600
}))
this.browserWindow.unwrap().loadFile(Path.join(__dirname, 'index.html'))
}
}
这对我来说没有任何意义,只会增加我对任何包含 javascript 的东西的挫败感。感觉就像一架随时可能毁灭自己的怪异超音速飞机……
我确实检查了它是否是一些奇怪的打字稿编译错误,但不是,我选择哪个 javascript 版本都没有关系,结果是一样的。编译后的代码是这样的,我也看不出有什么问题:
class Main {
constructor(app) {
this.indexFilePath = 'index.html';
this.app = app;
this.browserWindow = new option_1.None();
this.app.on('ready', this.onReady);
}
onReady() {
this.browserWindow = new option_1.Some(new Electron.BrowserWindow({
width: 800,
height: 600
}));
this.browserWindow.unwrap().loadFile(Path.join(__dirname, this.indexFilePath));
}
}
解决方案
经典范围错误:仅仅因为您从 中ready
提取this
,并不意味着它this.ready
具有任何定义的范围,它只是一个裸函数。
因此,当您调用 时this.app.on('ready', this.onReady)
,您并不是在告诉 JS 在this
声明时保留关键字的含义。相反,this
一旦运行您的函数,该 JS 遇到的任何使用都将是“无论执行时的范围是什么”,并且当事件处理代码触发时,这将是全局范围而不是您的类实例。
非常简单的解决方案:这就是我们发明箭头函数的目的。
this.app.on('ready', () => this.onReady())
完成,当这个函数被执行时,它this
仍然和声明时一样。
推荐阅读
- java - 使用 AffineTransform 旋转图像会产生视觉上正确的像素,但 getRGB 不匹配
- flutter - 如何在模态底页中制作 CheckboxListTile?
- java - Kafka 流连续抛出 OutOfMemory 异常并停止工作
- java - 在 Java 中使用 OOP 实现二叉树
- kubernetes - 无法为入口后面的入口设置安全连接 - 网关错误
- c++ - 如何使用函数返回成员数据的地址
- machine-learning - 为什么不同大小的 tensorflow .h5 模型文件取决于哪个回调函数存储它?
- r - 在嵌套 dplyr 数据集中运行配对 t 检验的问题
- python - 重新分配 numpy.array()
- javascript - 在javascript中匹配正则表达式并过滤掉一个字符