导出类导致“TypeError:...不是函数”

时间:2014-02-06 13:30:07

标签: javascript node.js

我有node.js应用程序,其中我有一个class.js模块,其中

var MyClass = module.exports.MyClass = function MyClass(){}

Object.defineProperty(MyClass, 'MyArray', ['value1','value2']);

MyClass.prototype.MyFunction = function(){
    //---
}

然后我require在我的主app.js

var MyClass = require('./class.js');

var myInstance = new MyClass(); // TypeError: object is not a function

但是当我尝试使用new实例化它时会抛出该错误。我在这做错了什么?我已经尝试了很多改动,但没有任何改变,但我知道它(或接近它的东西)曾经工作..

1 个答案:

答案 0 :(得分:2)

var MyClass = require('./class.js').MyClass;

您必须将MyClass成员分配给MyClass exports成员。否则,您正在使用new返回的模块实例调用require

否则您可以像这样导出:

var MyClass = module.exports = exports = function MyClass(){}

并按原样保留require语句。在这种情况下,您将从模块中导出一个和一个函数。 (从技术上讲,您不需要在上面的行中指定exports。但是,如果您不在exports module.exports ceases to be an alias。我更愿意保留他们同步。)