首页 > 解决方案 > 从扩展的电子类调用类方法时出错

问题描述

首先,我是 javascript 和 Electron 的新手。这是一个代码片段,用于复制来自 YouTube 上基本 Javascrip/Electron 教程的概念,由于某种原因,它对我不起作用。

一切都按预期工作。现在,通过扩展 Tray(Electron 类)定义一个派生类并做同样的事情:

我在脚本中遗漏了什么吗?为什么会发生这种情况?

注意 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)
}) 

标签: javascriptelectronextendsderived-classmethod-call

解决方案


除非有明确的迹象表明,根据设计,派生 Electron 类会破坏此代码段中使用的编码解决方案。

https://github.com/electron/electron/issues/25721

我们不支持扩展 Electron 中的内置类

Electron 中的内置类不是普通的 javscript 对象,也不支持所有 js 行为,例如扩展类。


推荐阅读