我在重构我的东西时遇到了一个小问题......问题:我得到了一个包含 1.1k 行和 ~10 个方法的类文件我想做的事情(tl;dr):将每个方法外包到它自己的文件中,module.export 它们,有一个需要所有这些的帮助方法/文件,让我的类只导入这个帮助文件并将所有方法添加回我的类,以便 class.method 正确调用它们。我想做什么(有一点额外的)Aight - 状态是这样的……我有课我的类.jsclass MyClass{ constructor(a,b){ this.a = a this.b = b } methodOne(){ console.log(this.a) *100 lines of code* } methodTwo(){ *100 lines of code* } methodThree(){ *100 lines of code* } .... and so on}我想要什么:方法一.js module.exports.methodOne = () => { console.log(this.a) 99 more lines of Code }方法二.js module.exports.methodTwo = () => { 100 lines of Code }...等等functions_injector.js - 长度有点伪const fs = require('fs')const functions = {}const functionsInjector = () => { fs.readDir('./functions/', (err, files) => { files.each((fileName) => { functions[fileName.split('.')[0]] = require('./functions/'+fileName) }}functionsInjector()module.exports = functions我的类.jsconst functions = require('./functions_injector')class MyClass { constructor(a,b) { this.a = a this.b = b }}const funcNames = Object.keys(functions)const funcs = Object.values(functions)funcNames.forEach((funcName, idx) => { MyClass.prototype[funcName] = funcs[idx]}const tryMe = new MyClass('a', 'b)const plsWork = tryMe.methodOne()console.log(plsWork)预期:'a'但遗憾的是,现实是:未定义通过在 methodOne.js 中调用 console.log(this) 来深入挖掘一下,返回 {methodOne: [Function]) 有点道理。但由于这是通过调用的结果const tryMe = new MyClass()tryMe.methodOne()我至少可以确认,我可以通过类访问这些方法,现在他们只需要访问相同的this代码稍微简化了一点。真正的代码是完全异步/等待等等,但我不想用更多代码来打扰你。注入器的构造并将其传递给 myClass 正在工作,我可以访问 {name:function} 对的对象。是类的方法。非常感谢任何帮助!干杯PS:我可能可以让每个方法成为它自己的类并扩展和扩展......不想走那条路...我还在考虑我是否在方法的 module.exports 方面做错了什么。如果我这样做了,我绝对没有任何线索:D
1 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
此方法有效,但箭头函数未绑定this,arguments因此无法访问this.a或this.b
而且,您的MyClassit 中有一个错字constructor。
简单的概念证明:简单的代码示例:
const methodOne = function () {
console.log(this.a);
}
class MyClass {
constructor(a, b) {
this.a = a;
this.b = b;
}
m2() {
console.log(this.b);
}
}
MyClass.prototype.methodOne = methodOne;
const tryMe = new MyClass('I work', 'I work too');
tryMe.methodOne()
tryMe.m2();
输出:
I work
I work too
添加回答
举报
0/150
提交
取消