gpt4 book ai didi

javascript - NodeJS 模块导出/原型(prototype) - 没有方法

转载 作者:IT老高 更新时间:2023-10-28 23:19:29 26 4
gpt4 key购买 nike

我有一个如下所示的模块:

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) {

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];
} } has no method 'put'

我的 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 () {});

回顾:

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();

关于javascript - NodeJS 模块导出/原型(prototype) - 没有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14300411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com