看完这篇文章后,我有几个问题:hasOwnProperty与propertyIsNumerable
我可以说一个对象中的所有方法都是不可枚举的吗?如果没有,你能举一个可枚举的方法的例子吗?如何创建可枚举方法?
默认情况下,添加到对象或其原型链的所有方法都是可枚举的。如果您查看任何调试工具,如firebug或webkit检查器,您会注意到一些属性不会显示在任何for in
循环中。
这些属性例如是prototype
、__proto__
、isPrototypeOf
等等。
看完这篇文章后,我有几个问题:hasOwnProperty与propertyIsNumerable
你似乎只读过这个问题:-)
我可以说一个对象中的所有方法都是不可枚举的吗?
首先,JavaScript中没有"方法"。一个对象可以有一个作为函数的属性。或者它可以从其原型对象继承一个。
如果没有,你能举一个可枚举的方法的例子吗?
如果你从链接的问题中获取示例函数,并在一个实例上循环,你将获得所有可枚举的属性,包括继承的和直接的:
> for (var prop in new f) console.log(prop)
a
b
c
d
e
g
它没有记录从Object.prototype
继承的不可计数的属性,如toString
或isPrototypeOf
。
那么为什么isEnumberable
返回false呢?答案很好地解释了这一点:函数只考虑自己的属性,而不考虑从原型继承的属性。
如何创建可枚举方法?
问题应该是"如何创建非枚举方法?"。对于该任务,请使用Object.defineProperty
。
默认情况下,通过简单赋值创建的每个其他属性都是可枚举的。这既适用于普通属性,也适用于从其原型继承的属性。