我一直试图弄清楚为什么我的代码中的这一特定行仍然说'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)
答案 0 :(得分:1)
由于您使用paren开始相关语句,因此需要以分号结束前一个语句。你还没有在你的Plunker中这样做过。只需在前一个语句中添加分号,就不会看到错误:
tElem.addClass('form-control');
(compileStrategies[tAttr.bsFormItem] || noop).apply(this, arguments)