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
的情况下使用 javascript 的 for..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 的情况下发布数组?