Javascript propertyIsEnumerable - 有任何可枚举的方法吗?

时间:2012-07-28 13:29:29

标签: javascript

阅读本文后,我几乎没有问题:hasOwnProperty vs propertyIsEnumerable

我可以说对象中的所有方法都不可枚举吗?如果没有,你能给出一个可枚举的方法的例子吗?如何创建一个可枚举的方法?

2 个答案:

答案 0 :(得分:1)

默认情况下,您添加到对象或其原​​型链的所有方法都是可枚举的。 如果您查看任何调试工具(如firebug或webkit检查器),您会注意到某些属性不会出现在任何for in循环中。

此类属性例如为prototype__proto__isPrototypeOf等。

答案 1 :(得分:0)

  

我在阅读完这些问题后面了几个问题:hasOwnProperty vs propertyIsEnumerable

您似乎只阅读了问题: - )

  

我可以说对象中的所有方法都不可枚举吗?

首先,没有"方法"在JavaScript中。对象只能具有属性的属性。或者它可以从原型对象继承一个。

  

如果没有,你能给出一个可枚举的方法的例子吗?

如果您从链接的问题中获取示例函数,并循环实例,您将获得所有可枚举的属性,包括继承和直接:

> for (var prop in new f) console.log(prop)
a
b
c
d
e
g

它没有记录从Object.prototype继承的不可数属性,例如toStringisPrototypeOf

那么为什么isEnumberable会返回false?这在the answers中得到了很好的解释:该函数仅考虑自己的属性,而不是从原型继承的属性。

  

如何创建可枚举的方法?

问题应该是"如何创建 - 可枚举的方法?"。对于该任务,请使用Object.defineProperty

默认情况下,由简单赋值创建的每个其他属性都是可枚举的。这适用于普通属性和从原型继承的属性。