使用 require 的依赖注入可能失败,抛出“不是函数”错误

仙魔

我查看了一些与此错误相关的问题,其中大部分似乎是对关键字this含义的误解我不认为我在这里有这个问题。我的可能是某种循环依赖问题,我无法很好地表达出来,无法自己解决。

我试图将我的问题提炼成下面显示的三个文件。

东西.js

var A = require('../lib/a');

var Something = function (type) {
    this.type = type;
};

Something.prototype.setTemplate = function (template) {
    this.template = template;
};

Something.prototype.applyTemplate = function () {
    var templateResult = this.template.calculate();
};


var factory = {};

factory.createSomething = function(type) {
    return new Something(type);
};

factory.createA = function (input) {
    return A.Make(input);
};

module.exports = factory;

js

var S = require('../prof/something');
var _ = require('underscore');

var A = function (input) {
    this.input = input;
};

A.prototype.calculate = function () {
    var calculation = 0;
    var _s = S.createSomething('hello world');
    // do calculation using input
    return calculation;
};

var factory = {};

factory.Make = function (input) {
    var a = new A(input);
    return a;
};

module.exports = factory;

a_test.js

describe('Unit: A Test', function() {

    var S = require('../prof/something');

    it('test 1', function() {
        var a = S.createA({
            //input
        });

        var s = S.createSomething('type1');

        s.setTemplate(a);
        s.applyTemplate(); // error
    });
});

错误从a_test.js带有注释的行的顶层抛出//error在最低级别,“不是函数”错误是在方法中抛出a.jsS.createSomething(type)它说这S.createSomething()不是一个函数。

我在该行放置了一个断点并尝试从下划线库调用函数,但它给出了相同的错误。所以看起来里面的require语句a.js没有抛出错误,但是没有一个注入的对象可以用来调用函数。a_test.js文件正在与 karma 库一起运行。

通过在 A 和 S 之间来回引用,我是否违反了一些 javascript 范式?我怎样才能正确地做到这一点?


编辑:我做了一些进一步的测试。测试文件是否如下所示实际上并不重要:

describe('Unit: A Test', function() {

    var S = require('../prof/something');

    it('test 1', function() {
        var a = S.createA({
            //input
        });
        a.calculate(); // error
    });
});

上面指示的行仍然会抛出错误。

仙魔

问题中的文件相互引用。这称为循环依赖。解决方案是将var S = require('../prof/something');语句移动到计算函数中,如下所示:

js

// move the line from here
var _ = require('underscore');

var A = function (input) {
    this.input = input;
};

A.prototype.calculate = function () {
    var S = require('../prof/something'); // to here
    var calculation = 0;
    var _s = S.createSomething('hello world');
    // do calculation using input
    return calculation;
};

var factory = {};

factory.Make = function (input) {
    var a = new A(input);
    return a;
};

module.exports = factory;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 require 加载依赖项

来自分类Dev

使用require语句而不是require_once有什么好处?

来自分类Dev

使用require()函数而不使用路径

来自分类Dev

使用Require.js调用函数

来自分类Dev

Typedoc使用require语法引发错误

来自分类Dev

在使用require('express')时显示错误

来自分类Dev

使用dojo require解决jQuery和jQueryUI之间的依赖关系

来自分类Dev

使用requirejs编译javascript程序以删除require依赖项

来自分类Dev

电子/节点-使用require和readFile的片段使javascript失败

来自分类Dev

对私有npm模块使用require()和import失败

来自分类Dev

require('mysql')在OpenShift中使用NodeJS服务器失败

来自分类Dev

如何在 node js 中使用 import 而不是 require ?

来自分类Dev

perl 使用 vs require 和 import,常量只是函数

来自分类Dev

我应该使用依赖注入而不是类函数吗?

来自分类Dev

未捕获的TypeError:使用require.js时undefined不是函数

来自分类Dev

Uncaught TypeError:使用require.js时undefined不是一个函数

来自分类Dev

require()中的函数抛出未定义的错误

来自分类Dev

Require.js#require在本地失败(file:///)

来自分类Dev

如何避免使用require(“ ../../ Path / To / Module”),而只使用require(“ Module”)

来自分类Dev

打字稿注入 `require(...)` 而不是导入文件

来自分类Dev

尝试在define([])中加载require时,require不是函数

来自分类Dev

如何使用react require语法?

来自分类Dev

无法使用Require加载模块

来自分类Dev

如何正确使用PHP require

来自分类Dev

如果该指令使用“ require”,是否可以将指令的控制器注入其链接函数中?

来自分类Dev

为什么在使用`require`而不是在使用`import`时在vscode中获得Intellisense

来自分类Dev

而不是使用来自“ some-lib”的import {a,b},使用require的等效项是什么?

来自分类Dev

覆盖require函数

来自分类Dev

Lua模拟require函数

Related 相关文章

  1. 1

    使用 require 加载依赖项

  2. 2

    使用require语句而不是require_once有什么好处?

  3. 3

    使用require()函数而不使用路径

  4. 4

    使用Require.js调用函数

  5. 5

    Typedoc使用require语法引发错误

  6. 6

    在使用require('express')时显示错误

  7. 7

    使用dojo require解决jQuery和jQueryUI之间的依赖关系

  8. 8

    使用requirejs编译javascript程序以删除require依赖项

  9. 9

    电子/节点-使用require和readFile的片段使javascript失败

  10. 10

    对私有npm模块使用require()和import失败

  11. 11

    require('mysql')在OpenShift中使用NodeJS服务器失败

  12. 12

    如何在 node js 中使用 import 而不是 require ?

  13. 13

    perl 使用 vs require 和 import,常量只是函数

  14. 14

    我应该使用依赖注入而不是类函数吗?

  15. 15

    未捕获的TypeError:使用require.js时undefined不是函数

  16. 16

    Uncaught TypeError:使用require.js时undefined不是一个函数

  17. 17

    require()中的函数抛出未定义的错误

  18. 18

    Require.js#require在本地失败(file:///)

  19. 19

    如何避免使用require(“ ../../ Path / To / Module”),而只使用require(“ Module”)

  20. 20

    打字稿注入 `require(...)` 而不是导入文件

  21. 21

    尝试在define([])中加载require时,require不是函数

  22. 22

    如何使用react require语法?

  23. 23

    无法使用Require加载模块

  24. 24

    如何正确使用PHP require

  25. 25

    如果该指令使用“ require”,是否可以将指令的控制器注入其链接函数中?

  26. 26

    为什么在使用`require`而不是在使用`import`时在vscode中获得Intellisense

  27. 27

    而不是使用来自“ some-lib”的import {a,b},使用require的等效项是什么?

  28. 28

    覆盖require函数

  29. 29

    Lua模拟require函数

热门标签

归档