-
Object.keys() 能够得到自身的可以枚举的属性,但是得不到原型链上的属性
-
Object.getOwnPropertyNames() 能够得到自身属性,包括不可枚举的属性,但是得不到原型链上的属性
-
Object.getOwnPropertySymbols() 可以得到自身的Symbols属性,包括不可枚举的属性,不可被继承
-
for...in 可以得到自身和继承原型链上的属性,但必须是可以枚举的属性
-
Object.getOwnPropertyDescriptor() //测试对象是否是可枚举的 enumerable?true可枚举:flase不可枚举
'use strict'
class A {
constructor(){
this.name='leo';
}
getName(){
}
}
class B extends A{
constructor(){
super();
this.age=22;
}
getAge(){
}
[Symbol('fullname')](){
}
}
B.prototype.getClass=function(){
};
let b = new B;
//Object.keys 能够得到自身的可以枚举的属性,但是得不到原型链上的属性
console.log(Object.keys(b));
console.log(Object.keys(B.prototype));//测试原型链上的属性
//Object.getOwnPropertyNames 能够得到自身属性,包括不可枚举的属性,但是得不到原型链上的属性
console.log(Object.getOwnPropertyNames(b));
console.log(Object.getOwnPropertyNames(B.prototype));//测试原型链上的属性
//Object.getOwnPropertySymbols 可以得到自身的Symbols属性,包括不可枚举的属性,不可被继承
console.log(Object.getOwnPropertySymbols(B.prototype));
//可以得到自身和继承原型链上的属性,但必须是可以枚举的属性
for(let key in b){
console.log(key)
}
//测试对象是否是可枚举的
console.log(Object.getOwnPropertyDescriptor(B.prototype,'getClass')) //enumerable?true可枚举:flasef不可枚举