阅读本文后,我几乎没有问题:hasOwnProperty vs propertyIsEnumerable
我可以说对象中的所有方法都不可枚举吗?如果没有,你能给出一个可枚举的方法的例子吗?如何创建一个可枚举的方法?
答案 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
继承的不可数属性,例如toString
或isPrototypeOf
。
那么为什么isEnumberable
会返回false?这在the answers中得到了很好的解释:该函数仅考虑自己的属性,而不是从原型继承的属性。
如何创建可枚举的方法?
问题应该是"如何创建非 - 可枚举的方法?"。对于该任务,请使用Object.defineProperty
。
默认情况下,由简单赋值创建的每个其他属性都是可枚举的。这适用于普通属性和从原型继承的属性。