Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
JavaScript 异常"is not a function"会在试图去调用一个像函数一样的值,但是该值实际上不是函数时被抛出。
问题出在你试图去调用一个像函数一样的值,但是该值实际上不是函数,有时候你的代码需要调用一些函数,但是那种值并不能当作函数来被调用。
也许函数名称上有错别字?也许你正在调用 Object 对象没有这个方法?例如,在 JavaScript 中单纯的对象 (Object) 没有map函数,但是 JavaScript 数组 (Array) 对象却有这个函数。
再比如,在 JavaScript 中很多原生对象的内置方法需要你提供一个(回调)函数。所以你必须提供一个函数,以使这些方法正常工作:
当你在使用 Array 或 TypedArray 对象时:
函数的名称拼写错误,这种情况是经常发生的:
正确的方法名应该是 getElementById:
对于某些特殊的方法,它只属于某些特定的原生对象中,你必须提供一个回调函数才能正常运行。例如:这里调用了一个 Array.prototype.map() 方法,但是这方法只能被 Array 对象所调用。
正确的做法,使用一个数组来代替:
当你在创建类时,可能会存在某个属性和某个方法的名称相同,当你在调用该函数时,编译器会认为该函数不存在。
正确的做法是使用不同的变量名。
在数学中,你可以将 2 × (3 + 5) 写为 2*(3 + 5) 或者省略为 2(3 + 5).
使用后者时将会抛出错误:
你可以添加乘法运算符 * 来改正代码:
确保正确导入模块。
以下为一个示例模块 (helpers.js)
let helpers = function () { }; helpers.groupBy = function (objectArray, property) { return objectArray.reduce(function (acc, obj) { var key = obj[property]; if (!acc[key]) { acc[key] = []; } acc[key].push(obj); return acc; }, {}); } export default helpers;在 App.js中正确导入该模块:
import helpers from './helpers'