【问题标题】: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..inJSLint 之类的工具将在您的代码中报告错误。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-13
        • 2019-02-01
        相关资源
        最近更新 更多