class D {
constructor() {
super();
this.x = 10;
}
getX() {
console.log('x');
}
}
D.prototype.getY = function() {
console.log('y');
}
const d = new D();
for (let key in d) {
console.log(key); //=>x getY ——————1
}
console.log(Reflect.ownKeys(d)); //=>['x'] ——————2
console.log(Reflect.ownKeys(d.__proto__)); //=>['constructor', 'getX', 'getY'] ——————3
console.log(Object.keys(d)); //=>['x'] ——————4
console.log(Object.keys(d.__proto__)); //=>['getY'] ——————5
结论:
for...in...:
遍历实例原型链上的所有可枚举属性,由第一个输出结果可知,在类中添加到原型上的属性不可枚举,在类外添加到原型上的属性可枚举;
Reflect.ownKeys: 由第2、3个输出结果可知,遍历当前对象所有私有属性(包含可枚举和不可枚举属性);
Object.keys: 由第4、5个输出结果可知,遍历当前对象所有可枚举私有属性。