迭代对象的方法
- for in 循环会得到对象原型链上的属性,不包含不可枚举属性
- Object.keys() 只包含自身属性,不包含原型链
- Object.getOwnPropertyNames() 返回自身属性和不可枚举属性
看下面代码
// 声明一个构造函数
function Person() {
this.name = "huo"
this.age = 18
this.getName = function () {
console.log(this.name)
}
};
Person.prototype.hobby = "洗脚"//在原型上设置属性
obj = new Person()
// 在obj实例上设置age 为不可枚举属性
Object.defineProperty(obj, "age", {
value: "male",
//是否为枚举属性
enumerable: false
});
//所有迭代对象的方法只有for in 可以迭代原型上的属性
for (let i in obj) {
console.log(i)
}
console.log(Object.keys(obj))//Object.keys获得自身属性
console.log(Object.getOwnPropertyNames(obj))//获得自身,加上不可枚举属性