遍历对象属性

  • 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不可枚举
发布了13 篇原创文章 · 获赞 5 · 访问量 2519

猜你喜欢

转载自blog.csdn.net/qq_37309764/article/details/105090435