【发布时间】:2016-04-01 05:54:15
【问题描述】:
如何列出对象及其原型链中的所有属性(方法和属性)? 我对所有这些都感兴趣(可枚举的和不可枚举的)。
目标浏览器 - chrome。
【问题讨论】:
标签: javascript list properties prototype chain
如何列出对象及其原型链中的所有属性(方法和属性)? 我对所有这些都感兴趣(可枚举的和不可枚举的)。
目标浏览器 - chrome。
【问题讨论】:
标签: javascript list properties prototype chain
这个:
for(var k in obj) {
console.log(k, obj[k]) // name, value
}
示例:
var obj1 = { a: 10, b: "x", c: { no: "no" }}
var obj2 = new Object(obj1)
obj2.d = "yes"
for (var k in obj2) {
console.log(k, obj2[k]) // name, value
}
【讨论】:
我对所有这些都感兴趣(可枚举的和不可枚举的)。
您无法枚举不可枚举的内容。实际上,您可以定义不可枚举的属性来避免它们作为迭代器的一部分出现,例如 for...in 或 Object.keys。请参阅此其他问答以了解有关解决方法的更多信息:Is it possible to get the non-enumerable inherited property names of an object?
目前,迭代所有属性(包括自己的属性和原型的属性)的最简单方法是使用for...in 循环:
for(var propertyName in obj) {
}
您可以使用Object.hasOwnProperty 检查给定对象原型上是否未声明属性:
for(var propertyName in obj) {
if(obj.hasOwnProperty(propertyName)) {
// It's not from the object's prototype...
}
}
【讨论】: