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

Posted

技术标签:

【中文标题】JavaScript:如何在不使用 Object.defineProperty 的情况下定义不可枚举的方法?【英文标题】:JavaScript: How to Define a Non-Enumerable Method without using Object.defineProperty? 【发布时间】:2012-01-16 23:14:30 【问题描述】:

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

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

还有其他方法可以使方法不可枚举吗?

【问题讨论】:

【参考方案1】:

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

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

如果您在没有hasOwnProperty 检查的情况下使用for..in,JSLint 之类的工具将在您的代码中报告错误。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于JavaScript:如何在不使用 Object.defineProperty 的情况下定义不可枚举的方法?的主要内容,如果未能解决你的问题,请参考以下文章

在不使用 JavaScript 的情况下,如何在选择字段集中时使 Enter 键提交表单?

如何在不使用 JavaScript 的情况下一次单击打开两个页面?

如何在不使用 Javascript 的情况下最好地重定向网页?

Ajax 和 JavaScript,如何在不使用 JQuery 的情况下发布数组?

如何在不使用 JSON 的 Javascript 中将项目名称和分数保存到 localStorage

如何在不使用outerHTML的情况下在javascript中将标签作为文本? [复制]