为了账号安全,请及时绑定邮箱和手机立即绑定

将方法导出到类中的正确方法(原型?)

将方法导出到类中的正确方法(原型?)

慕桂英3389331 2021-11-12 10:48:52
我在重构我的东西时遇到了一个小问题......问题:我得到了一个包含 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


查看完整回答
反对 回复 2021-11-12
  • 1 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信