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

我在重构我的东西时遇到了一个小问题......


问题:


我得到了一个包含 1.1k 行和 ~10 个方法的类文件


我想做的事情(tl;dr):


将每个方法外包到它自己的文件中,module.export 它们,有一个需要所有这些的帮助方法/文件,让我的类只导入这个帮助文件并将所有方法添加回我的类,以便 class.method 正确调用它们。


我想做什么(有一点额外的)


Aight - 状态是这样的……我有课


我的类.js


class 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

我的类.js


const 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


慕桂英3389331
浏览 150回答 1
1回答

月关宝盒

此方法有效,但箭头函数未绑定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 workI work too
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript