0

读完后我有几个问题:hasOwnProperty vs propertyIsEnumerable

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

4

2 回答 2

1

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

此类属性例如prototype__proto__isPrototypeOf

于 2012-07-28T13:50:33.537 回答
0

读完后我有几个问题:hasOwnProperty vs propertyIsEnumerable

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

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

首先,JavaScript 中没有“方法”。对象只能具有作为函数的属性。或者它可以从它的原型对象继承一个。

如果不是,你能举一个可枚举的方法的例子吗?

如果您从链接的问题中获取示例函数,并遍历一个实例,您将获得所有可编号的属性,包括继承的和直接的:

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

它没有记录从Object.prototype、 liketoString或继承的不可枚举的属性isPrototypeOf

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

如何创建可枚举的方法?

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

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

于 2012-07-28T15:09:56.207 回答