当定义引用的内容时,“undefined不是函数”错误

时间:2014-05-25 16:29:48

标签: javascript angularjs

我一直试图弄清楚为什么我的代码中的这一特定行仍然说'undefined不是函数'。 Associated Plunker

// This line displays the function to be invoked
console.log((compileStrategies[tAttr.bsFormItem] || noop))
// This line displays that the bitwise selection is really a function
console.log(angular.isFunction(compileStrategies[tAttr.bsFormItem] || noop))
// Invocation with context that displays 'undefined is not a function'
(compileStrategies[tAttr.bsFormItem] || noop).apply(this, arguments)

我很困惑为什么它在显然按位选择产生函数时显示错误。我知道我可以检查是否定义了compileStrategies[tAttr.bsFormItem]然后调用它,但是这个问题真的让我烦恼。如果有人能够揭开这个神秘面纱,我会非常感激。

更新

另一个奇怪的问题是,当您将调用分配给变量或将其返回时,它不会显示“未定义的”不是函数'错误了。

e.g。

var fn = (compileStrategies[tAttr.bsFormItem] || noop).apply(this, arguments)

return (compileStrategies[tAttr.bsFormItem] || noop).apply(this, arguments)

1 个答案:

答案 0 :(得分:1)

由于您使用paren开始相关语句,因此需要以分号结束前一个语句。你还没有在你的Plunker中这样做过。只需在前一个语句中添加分号,就不会看到错误:

tElem.addClass('form-control');
(compileStrategies[tAttr.bsFormItem] || noop).apply(this, arguments)

Forked Plunker