读完后我有几个问题:hasOwnProperty vs propertyIsEnumerable
我可以说对象中的所有方法都不可枚举吗?如果不是,你能举一个可枚举的方法的例子吗?如何创建可枚举的方法?
读完后我有几个问题:hasOwnProperty vs propertyIsEnumerable
我可以说对象中的所有方法都不可枚举吗?如果不是,你能举一个可枚举的方法的例子吗?如何创建可枚举的方法?
默认情况下,您添加到对象或其原型链的所有方法都是可枚举的。如果您查看任何调试工具,例如 firebug 或 webkit 检查器,您会注意到一些不会出现在任何for in
循环中的属性。
此类属性例如prototype
、__proto__
等isPrototypeOf
。
读完后我有几个问题: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
.
默认情况下,通过简单赋值创建的所有其他属性都是可枚举的。这适用于普通属性和从其原型继承的属性。