node.js - 如何在 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 类中时,我没有这个错误。
解决方案
这里的问题是,当您导入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;
}
然后从代码顶部删除导入。
推荐阅读
- python - 使用 python 将 csv 文件加载到 SnowFlake 表中
- spring-boot - 如何使 Spring Boot 适配器中的 Keycloak 策略执行器与 vaadin 一起使用
- apache - Apache 反向代理到动态端口
- c - 从北欧半导体库了解编写预处理器指令的方法
- ssl - 如何根据请求域动态设置 SSL 证书?
- azure - Bot Composer - QNA Intent 得到认可
- math - 这个后缀表达式在中缀中会是什么?
- java - 如何修复预期的此错误消息标识符?
- php - 致命错误:文件有问题。请在第 0 行联系 Unknown 中的技术项目经理
- javascript - 如何自动换行消息EmailJS