我正在試驗 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));
}
}
uj5u.com熱心網友回復:
經典范圍錯誤:僅僅因為您ready從this, 中提取并不意味著它this.ready具有任何定義的范圍,它只是一個裸函式。
因此,當您呼叫 時this.app.on('ready', this.onReady),您并不是在告訴 JS 在宣告時保留this關鍵字的含義。取而代之的是,任何使用的this是JS遭遇一次它運行的功能將是“任何范圍在時執行”,并在事件處理代碼觸發,這將是全球范圍內,而不是你的類的實體。
非常簡單的解決方案:這就是我們發明箭頭函式的目的。
this.app.on('ready', () => this.onReady())
完成,當這個函式被執行時,它this仍然和宣告時一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324649.html
標籤:javascript 节点.js 打字稿 电子
