如何确定原生JavaScript对象是否具有属性/方法?

12 浏览
0 Comments

如何确定原生JavaScript对象是否具有属性/方法?

我以为这会很简单:

if(typeof(Array.push) == 'undefined'){
  //未定义,原型化一个push方法的版本
  // Firefox从不执行这里,但IE/Safari/Chrome等会执行,即使
  // Array对象有一个push方法!
}

在Firefox中确实可以正常工作,但在IE,Chrome,Safari,Opera中不行,它们使用这个测试返回原生Array对象的所有属性/方法为'undefined'。

.hasOwnProperty(prop)方法只适用于实例...所以它不起作用,但通过试错我发现这个方法可以工作。

//这在Firefox/IE(6,7,8)/Chrome/Safari/Opera中有效
if(typeof(Array().push) == 'undefined'){
  //未定义,原型化一个push方法的版本
}

使用这种语法来确定原生对象/ ~"JavaScript类"~上是否存在属性/方法有什么问题,或者有更好的方法吗?

0