JavaScript:如何在不使用Object.defineProperty的情况下定义不可枚举的方法?

时间:2011-12-09 17:20:37

标签: javascript arrays object enumerable

我想向Object添加一个方法,但现在所有的数组和对象都有它。当我使用for(.. in ..)时,它会被启用,这对我的软件来说是一个问题。所以,我需要让我的方法不可枚举。

我知道有一个Object.defineProperty(),但旧的浏览器(现在仍然存在)以及Konqueror的最新版本都不支持它。

还有另一种方法可以使方法不可枚举吗?

2 个答案:

答案 0 :(得分:3)

没有。这就是为什么在没有立即检查for..in的情况下使用JavaScript的hasOwnProperty被认为是不好的做法。即,你应该总是这样做:

for (var item in obj) {
    if (obj.hasOwnProperty(item)) {
        // ...
    }
}

如果您使用for..in而不进行hasOwnProperty检查,JSLint等工具会在您的代码中报告错误。

答案 1 :(得分:0)

对于ECMAScript 3(在旧浏览器中使用),您无法更改可枚举属性 如果要过滤方法,也许可以检查对象的类型(.. in ..)。