【问题标题】:JavaScript: How to Define a Non-Enumerable Method without using Object.defineProperty?JavaScript:如何在不使用 Object.defineProperty 的情况下定义不可枚举的方法?
【发布时间】:2012-01-16 23:14:30
【问题描述】:
我想给 Object 添加一个方法,但是现在所有的数组和对象都有了。当我使用for(.. in ..) 时,它会被枚举,这对我的软件来说是个问题。所以,我需要让我的方法不可枚举。
我知道有一个Object.defineProperty(),但旧浏览器(仍然存在)甚至最新版本的 Konqueror 都不支持它。
还有其他方法可以使方法不可枚举吗?
【问题讨论】:
标签:
javascript
arrays
object
enumerable
【解决方案1】:
没有。这就是为什么在不立即检查 hasOwnProperty 的情况下使用 JavaScript 的 for..in 被认为是不好的做法。即,您应该始终这样做:
for (var item in obj) {
if (obj.hasOwnProperty(item)) {
// ...
}
}
如果您在没有hasOwnProperty 检查的情况下使用for..in,JSLint 之类的工具将在您的代码中报告错误。
【解决方案2】:
对于 ECMAScript 3(在旧浏览器中使用),您无法更改可枚举属性。
如果你想过滤方法,也许你可以在for(..in..)中检查对象的类型。