【发布时间】:2014-05-14 18:51:01
【问题描述】:
我不确定这是否可能,但我仍然会问是否可能。
我想制作一个可以以两种方式之一使用的模块:
-
像这样:
MyModule = require('mymodule'); MyModule.do('stuff');模块输出东西
-
或者像这样:(使用附加参数调用)
MyModule = require('mymodule')('some'); MyModule.do('stuff');模块输出“一些”东西
我试着让它如此喜欢
函数 MyModuleThatDoesntTakeArguments(argument){
函数 MyModuleThatTakesArgument(){
this.argument = 参数;
}
// 这将在传递参数时调用
MyModuleThatTakesArgument.prototype.do = function(){
console.log('输出',参数,'东西');
}
// this* 将在没有参数传递时被调用
this.do = 函数(){
console.log('输出东西');
}
返回 MyModuleThatTakesArgument;
}
// 或者 this* 将在没有参数时调用 ″ ″
MyModuleThatDoesntTakeArguments.prototype.do = MyModuleThatDoesntTakeArguments.do;
module.exports = MyModuleThatDoesntTakeArguments;
它在使用参数 (#1) 调用时有效,但会出现“函数对象没有方法 do”之类的错误。
我意识到基本问题是它可以作为构造函数调用(当使用参数调用时(#1)),这使得它返回内部函数。但是当没有参数调用时(#2)它只是返回构造函数本身,不幸的是它不能调用它的方法(this.do 或.prototype.do),因此会给出该错误。
所以我猜我写的乳清是不可能的。
还有其他方法可以实现我想要的吗?
【问题讨论】:
-
只需将
do函数附加到函数本身而不是原型(并阅读一些关于 JS 中的原型如何工作的内容)。
标签: javascript node.js node-modules