不知道这是否是正确的标题,但应该是快速的帮助。
由于“ TypeError:ParseThis.changeIt不是一个函数”,我在测试一个函数时经常遇到错误。这是我的代码。我会引起这种类型错误的原因是什么?谢谢!
const ParseThis = () => {
const changeIt = string => string;
return { changeIt: changeIt() }
}
编辑:更多详细信息!
再次感谢您的帮助
答案 0 :(得分:1)
返回对象时,也许您想返回函数而不是调用结果:
return { changeIt: changeIt };
或更简洁的是
return { changeIt };
根据您如何使用翻译功能,我认为您应该以这种方式导出它:
const Translator = {
const translate = string => string;
};
if (module.exports) {
module.exports = Translator;
}
或这种方式:
const Translator = () => {
const translate = string => string;
return { translate };
}
if (module.exports) {
module.exports = Translator();
}
答案 1 :(得分:0)
您的函数正在返回一个对象,所以不是
ParseThis.changeIt()
您应该做类似的事情
const a = ParseThis();
a.changeIt('some string');
但是请注意,即使在您的示例中,返回对象中的changeIt
也不是函数。
可能您正在尝试
const ParseThis = () => {
const changeIt = string => string;
return { changeIt: changeIt};
}
请注意,我使用过{ changeIt: changeIt}
,将changeIt
设置为内部函数changeIt
的引用。并且您正在使用{ changeIt: changeIt()}
将changeIt
设置为内部函数changeIt
返回的值。那是两个不同的操作。
答案 2 :(得分:0)
返回函数而不是调用它。
const ParseThis = () => {
const changeIt = string => string;
return { changeIt };
}
在原始帖子中,changeIt()
是对changeIt
的调用,没有第一个参数。它返回值undefined
。要返回一个函数而不是调用它,请省略括号。
答案 3 :(得分:0)
让我们分析您的代码。
让我们从这里开始:
const changeIt = string => string;
这时,changeIt是一个函数,给定一个参数,它将返回该参数。
没有箭头功能,如果我们应该使用旧的经典命名功能,它将是这样的:
function changeIt(parameter) {
return parameter;
}
如果不带参数调用changeIt()
会怎样?在javascript中,当您不向函数传递任何参数时,就像您正在传递未定义的一样。因此该函数将返回undefined
。
然后您有这行:
return { changeIt: changeIt() }
但是正如我们所看到的,changeIt()
等于undefined
。因此,您的代码等效于:
return { changeIt: undefined }
显然不是功能!
您可能想要做的是,不返回函数调用的结果,而是返回函数本身。因此,与其分配changeIt()
,不如分配changeIt
:
return { changeIt: changeIt }
请注意,您对单词changeIt
重复了两次,因此您可以摆脱这种重复,只需写:
return { changeIt }
答案 4 :(得分:0)
问题是您要导出一个函数,而不是包含nop函数的对象。您需要在您的虚拟对象上添加括号:
const Translator = () => {
const translate = string => string;
return { translate };
};
if (module.exports) {
module.exports = Translator(); // add parenthesis here
}
或者,您可以运行导入的功能,但是我怀疑这与您真正的Translator api不同。