Javascript NodeJS模块导出/原型-没有方法

Javascript NodeJS模块导出/原型-没有方法,javascript,node.js,Javascript,Node.js,我有一个模块,看起来像这样: var MyModule = module.exports = function MyModule(opts) { opts = (opts === Object(opts)) ? opts : {}; if (!(this instanceof MyModule)) { return new MyModule(opts); } for (var key in opts) if ({}.hasOwnPropert

我有一个模块,看起来像这样:

var MyModule = module.exports = function MyModule(opts) {

    opts = (opts === Object(opts)) ? opts : {};

    if (!(this instanceof MyModule)) {
        return new MyModule(opts);
    }

    for (var key in opts) if ({}.hasOwnProperty.call(opts, key)) {
        this.config[key] == opts[key];
    }
};

MyModule.prototype.config = {
    something:'value'
}

MyModule.prototype.put = function put(info, cb) {
   //do stuff

};
var myModule = require('myModule.js');

myModule.put({test}, function(){
    //some callback stuff
});
但是,当我这样使用它时:

var MyModule = module.exports = function MyModule(opts) {

    opts = (opts === Object(opts)) ? opts : {};

    if (!(this instanceof MyModule)) {
        return new MyModule(opts);
    }

    for (var key in opts) if ({}.hasOwnProperty.call(opts, key)) {
        this.config[key] == opts[key];
    }
};

MyModule.prototype.config = {
    something:'value'
}

MyModule.prototype.put = function put(info, cb) {
   //do stuff

};
var myModule = require('myModule.js');

myModule.put({test}, function(){
    //some callback stuff
});
我得到以下错误:

类型错误:对象函数MyModule(opts){


看来我的
MyModule.prototype.put

有问题,因为这个代码
var MyModule=require('MyModule.js');
您的
MyModule
变量看起来像一个构造函数,而不是MyModule的实例

首先尝试实例化您的模块:

var MyModule = require('myModule.js');    
var myModule = new MyModule(); // Create an instance of your module.

// Now use it.
myModule.put(/*... your code here ...*/);
你写道:

var myModule = require('myModule.js');

myModule.put({}, function(){
  //some callback stuff
});
这里的
myModule
实际上是
myModule
,一个构造函数。所以你要做的是
myModule.put()
,调用
myModule
的“静态”方法。prototype.put定义了一个“实例”方法,所以你必须首先实例化:

var MyModule = require('./myModule.js');

var myModule = new MyModule();
// or as you used `if (!(this instanceof MyModule)) { … }`
var myModule = MyModule();

myModule.put({}, function () {});
因此,基本上,您的代码只需要一对
()
即可工作:

MyModule().put({}, function () {});
// same as
(new MyModule).put({}, function () {});
雷帽:

var MyModule = function () {
  // Construct object
};

MyModule.staticMethod = function () {
  this; // is bound to `MyModule` function object
};

MyModule.prototype.instanceMethod = function () {
  this; // is bound to the `MyModule` instance object it’s called from
};

// Usage

MyModule.staticMethod();

var instance = new MyModule();
instance.instanceMethod();

我不知道为什么有人会毫无理由地否决这个问题。理解CommonJS模块系统是编写node.js代码的一个相当重要的部分。即使你理解这个概念,但意外地忽略了它……这仍然是一个有效的问题。但我有一个“new”的实例,在I module.exports之后仍然无法获取原型函数