gpt4 book ai didi

javascript - 在文件之间拆分 Node.js 类扩展

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:00 24 4
gpt4 key购买 nike

我正在尝试在 Node.js 中创建一个 Discord 机器人。我有一个主文件 bot.js,其中包含主控制流。我想将世界状态实现为一个类,并将该类上的操作拆分到其他文件中。但是,我不太确定如何做到这一点,特别是我必须重新组合扩展同一类的多个函数文件(让我们称它们为startup.js 和bios.js)的部分。

我是否应该有一个包含类定义的单独文件,以便我可以将其导入到两个帮助程序文件中?

common.js

module.exports = botState;

class botState {
//class definition goes here
}

初始化.js

const common = require('./common');

class initializeState extends botState {
constructor () {
//it's a constructor; details not too important
}

function1 () {} //implementation not important

function2 () {}
}

module.exports = initializeState;

chars.js

const common = require('./common');

class bioState extends botState {
constructor () {
//it's a constructor; details not too important
}

function3 () {} //implementation not important

function4 () {}
}

module.exports = BioState;

bot.js

//main control flow is in this file
//I'd like to have a class that implements functions 1 through 4, but don't know how to do that.

我不知道如何实现 bot.js。可能有一些更好的结构来完全实现这一点。

最佳答案

听起来您正在尝试在同一文件或不同文件中进行一些多重继承,而 Javascript 不支持这种多重继承(请参阅此处的最后一节: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model )。

也就是说,您可以做的是利用原型(prototype)系统的工作原理。您可以将函数 1-4 与类定义分开编写,并将它们附加到您想要的类的原型(prototype)上。

function function1(){
this.someValue = this.someOtherValue + this.someMethod();
return 7;
}
// ... and other functions

BioState.prototype.function1 = function1;
InitializeState.prototype.function1 = function1;

这些函数在哪里定义或附加到类原型(prototype)并不重要——尽管为了清楚起见,在一个地方声明这些函数、将它们导入到每个需要它的类的文件中,并在导出类之前将它们附加到原型(prototype)是有意义的。

const { function1, function2 } = require('./common-functions');
class Blah {
//...
}
Blah.prototype.function1 = function1;
Blah.prototype.function2 = function2;
// You could also do this in the constructor as this.function1 = function1;

module.exports = Blah;

关于javascript - 在文件之间拆分 Node.js 类扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59656033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com