如何在不使用Object.defineProperty的情况下定义一个非枚举方法

JavaScript: How to Define a Non-Enumerable Method without using Object.defineProperty?

本文关键字:下定义 一个 方法 枚举 情况下 情况 defineProperty Object      更新时间:2023-09-26

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

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

是否有其他方法使方法不可枚举?

No。这就是为什么使用JavaScript的for..in而不立即检查hasOwnProperty被认为是不好的做法。也就是说,你应该总是这样做:

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

如果你使用for..in而不检查hasOwnProperty, JSLint之类的工具会在你的代码中报告一个错误。

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