javascript - 要求解决未定义

标签 javascript node.js ecmascript-6 require

我有以下类结构。

员工服务.js

const {EmployeeRequestExecutor} = require('./EmployeeRequestExecutor');

class EmployeeService {
    fulfill(request){
        EmployeeRequestExecutor.delegateEmployeeRequest(request);
    }
}

module.exports = {EmployeeService};

员工请求执行器.js

const {HelpfulEmployee} = require('./HelpfulEmployee');

class EmployeeRequestExecutor {
    static delegateEmployeeRequest(request){
        let employee = new HelpfulEmployee();
        employee.work(request);
    }

    static executeEmployeeRequest(request){
        console.log('Executed', request);
    }
}

module.exports = {EmployeeRequestExecutor};

HelpfulEmployee.js

const {EmployeeRequestExecutor} = require('./EmployeeRequestExecutor');

class HelpfulEmployee {
    work(request){
        EmployeeRequestExecutor.executeEmployeeRequest(request);
    }
}

module.exports = {HelpfulEmployee};

如果我们这样做

let employeeService = new EmployeeService();
employeeService.fulfill(request);

我们得到 类型错误:无法读取 HelpfulEmployee.js 中未定义的属性“executeEmployeeRequest”:5:33

为什么HelpfulEmployee.js中这样的调用结构EmployeeRequestExecutor是未定义的?

最佳答案

HelpfulEmployee 和 EmployeeRequestExecutor 之间存在循环依赖(它们都需要彼此)。 循环依赖大多数时候是由类设计问题引起的。要修复它们,您应该重新考虑对象之间的信息流。

这是一个选项,但还有更多选项:

const {HelpfulEmployee} = require('./HelpfulEmployee');

class EmployeeRequestExecutor {
    static delegateEmployeeRequest(request){
        let employee = new HelpfulEmployee();
        let requestExecutor = new EmployeeRequestExecutor();
        employee.work(request, requestExecutor);
    }

    executeEmployeeRequest(request){
        console.log('Executed', request);
    }
}

module.exports = {EmployeeRequestExecutor};
class HelpfulEmployee {
    work(request, requestExecutor){
        requestExecutor.executeEmployeeRequest(request);
    }
}

module.exports = {HelpfulEmployee};

关于javascript - 要求解决未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59426047/

相关文章:

javascript - 为什么 async await 不能正确地与 axios 一起工作?

javascript - 如何在函数定义中一起使用剩余和扩展运算符?

javascript - 如何防止关闭对话框刷新时弹出关闭对话框

javascript - ng-click 指令中的 ng-repeat

javascript - 导入ES2015模块时的模块版本

javascript - 如何使用 SpringBoot 和 Angular2 设置结构?

node.js - 如何将 Node v8 参数和脚本参数传递给 pm2?

javascript - 为什么使用 Webpack 和 Gulp 构建的输出包这么大(>1.9Mb)?

mysql - 如何模拟mysql数据库?

javascript - 在 nodeJs v4.4.2 中使用 ES6 模板文字