Types 如何检查子项(聚合物)中是否存在函数

Types 如何检查子项(聚合物)中是否存在函数,types,polymer,Types,Polymer,母公司 如何检查子函数是否存在 这个扔 未捕获类型错误:此.child.function不是函数 代码的主要问题可能是,您实际上使用括号()调用函数,然后将结果与字符串“function”进行比较。 要检查是否存在,请删除括号: check() { if(typeof this.$.child.function() == 'function') { // do something } } 但是,调用时,this.$.child未定义也可能导致此错误。如果您试图访问组件的静态节点

母公司

如何检查子函数是否存在

这个扔

未捕获类型错误:此.child.function不是函数


代码的主要问题可能是,您实际上使用括号
()
调用函数,然后将结果与字符串
“function”
进行比较。 要检查是否存在,请删除括号:

check() {
  if(typeof this.$.child.function() == 'function') {
    // do something
  }
}
但是,调用时,
this.$.child
未定义也可能导致此错误。如果您试图访问组件的静态节点映射(
This.$
),而Polymer尚未初始化它,则可能会发生这种情况


映射可以在
ready
生命周期回调中访问:请参阅。

假设您没有使用保留关键字“function”作为方法名称,则以下操作应该可以正常工作:

if (this.$.child.function == 'function') { /* ... */ };

这是一个有效且非常重要的观点——我必须处理一些由调用非$mapped节点(如dom if内部)引起的错误。始终检查您的节点映射是否确实包含您当时所需的内容。因此,不使用括号不会引用属性?我更倾向于检查@Umbo所述的内容,即“函数”当时不可访问。考虑:
var a=function(){return 2}typeof a//“function”typeof a()/“number”
,这样您的案例至少不会产生“未捕获的类型错误”
check() {
  if(typeof this.$.child.someFunDefinedInChild == 'function') {
  //do work
  }
}