首页 > 解决方案 > 如何在 JS 中访问父类的静态变量?

问题描述

我有一个主要的静态类,为了我的舒适,它开始变得冗长且难以阅读。我想将它的一些组件(嵌套静态类)移动到其他文件中以进行清理。

当我将User子类移动到一个单独的文件中时,我的问题就出现了,即使我将主类导入到该新文件中,主类中的guildServer静态变量也是未定义的,尽管之前总是使用我之前创建的init进行设置.

这是我的代码:

// corvus.js (main static class)

module.exports = class Corvus{
  // ...
  static guildServer = null;

  static init(callback){
    // Sets guildServer (which is Guild object from Discord.js), is called when starting the program and is always executed before anything else.
  }

  static User = require("path to user.js");

  // ...
  // Other classes I want to move into separate files as well
}

// user.js

// Import corvus.js else its parameters are unknown
const Corvus = require('path to corvus.js');

module.exports = class User{
    /**
     * Returns whether a user is a guild member or not.
     * @param {User} userID
     * @returns {Boolean}
     */
    static isMember(user){
        let member = Corvus.guildServer.member(user);
        if(member){
            // Do something
        }
        return false;
    }
    
    // ...
}

当我调用 Corvus.User.isMember('userID') 时,我从 isMember() 函数中收到错误“无法读取未定义的属性 'member'”,这意味着在 user.js 中使用 Corvus.guildmember 时未定义。但是,当 User 类直接嵌套在 Corvus 类中时,我没有这个错误。

标签: node.jsdiscord.js

解决方案


这里的问题是,当您导入Corvus用户文件时,它是在执行任何代码之前导入的,这意味着Corvus.guildServer定义为空。

这是您的问题的快速解决方案:

static isMember(user){
    const Corvus = require('path to corvus.js');

    let member = Corvus.guildServer.member(user);
    if(member){
        // Do something
    }
    return false;
}

然后从代码顶部删除导入。


推荐阅读