javascript - 从扩展的电子类调用类方法时出错
问题描述
首先,我是 javascript 和 Electron 的新手。这是一个代码片段,用于复制来自 YouTube 上基本 Javascrip/Electron 教程的概念,由于某种原因,它对我不起作用。
- 定义一个基类“base”
- 定义一个名为“派生”的类,该类扩展“基”
- 在派生构造函数中,调用 super() 然后调用派生类方法 this.showSomething()
一切都按预期工作。现在,通过扩展 Tray(Electron 类)定义一个派生类并做同样的事情:
- 定义一个名为“derivedFromTray”的类,该类扩展“Tray”
- 在派生构造函数中,调用 super() ,然后调用派生类方法 this.showSomething() 这会导致错误:this.ShowSomething is not a function
我在脚本中遗漏了什么吗?为什么会发生这种情况?
注意 1:我对调用扩展类方法的替代编码解决方案不感兴趣,除非有明确的迹象表明,通过设计,派生 Electron 类会破坏此代码段中使用的编码解决方案。
您可以在此处找到教程:如何编码 - Electron JS 教程 #46
节点版本:15.8.0 - 电子版本:11.2.3
复制问题的代码:
const electron = require('electron')
const path = require('path');
const {app, Tray} = electron;
class base{
constructor(path){
this.internalPath = path
}
}
class derived extends base {
constructor(path) {
super(path)
this.showSomething();
}
showSomething()
{
console.log(`internal Path: ${this.internalPath}`);
}
}
class derivedFromTray extends Tray {
constructor(iconPath) {
super(iconPath)
this.showSomething() // ERROR: this.showSomething is not a function
}
showSomething()
{
console.log('Log from derivedFromTray.showSomething');
}
}
app.on('ready', ()=>{
// WARNING: specify a valid image path or the example
// will not work!
const paramPath = path.join(__dirname, "app_tray_icon.png")
const workingDerived = new derived(paramPath)
const notWorkingDerived = new derivedFromTray(paramPath)
})
解决方案
除非有明确的迹象表明,根据设计,派生 Electron 类会破坏此代码段中使用的编码解决方案。
https://github.com/electron/electron/issues/25721
我们不支持扩展 Electron 中的内置类
Electron 中的内置类不是普通的 javscript 对象,也不支持所有 js 行为,例如扩展类。
推荐阅读
- ansible - Ansible 抱怨“需要 MySQL-python 模块”
- rally - Rally API 日期过滤器不起作用
- python - Evernote 访问令牌 Python
- cuda - nvlink 可以从单独的编译单元中内联设备功能吗?
- node.js - 切换到 Docker 后 Node 的缓存问题?
- html - 将文本元素的宽度继承给换行 HTML
- sql - 我们如何使用 XML 文件识别来自数据库中哪些表和列的值
- php - laravel 从数据库中检索数据需要太多时间
- c# - 如何以 M YYMMDD SS 方式获取日期
- apache-spark - Spark Yarn 模式不起作用在执行程序阶段引发 java Null Pointer 异常