无法正确访问内部功能

时间:2019-01-22 22:11:37

标签: javascript

不知道这是否是正确的标题,但应该是快速的帮助。

由于“ TypeError:ParseThis.changeIt不是一个函数”,我在测试一个函数时经常遇到错误。这是我的代码。我会引起这种类型错误的原因是什么?谢谢!

const ParseThis = () => {
    const changeIt = string => string;

    return { changeIt: changeIt() }

}

编辑:更多详细信息!

再次感谢您的帮助

5 个答案:

答案 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不同。

相关问题