javascript – NodeJS Module export / prototype – 没有方法

前端之家收集整理的这篇文章主要介绍了javascript – NodeJS Module export / prototype – 没有方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个模块,如下所示:
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
});

我收到以下错误

TypeError: Object function MyModule(opts) {

06002

看来我的MyModule.prototype.put有问题吗?

解决方法

你写了 :
var myModule = require('myModule.js');

myModule.put({},function(){
  //some callback stuff
});

这里myModule其实是MyModule,一个构造函数.所以你正在做的是MyModule.put(),调用MyModule的“静态”方法. 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 () {});

Récap:

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();
原文链接:https://www.f2er.com/js/155194.html

猜你在找的JavaScript相关文章