朋友们好 啊~
先简单介绍一下两个方法
1、Object.create(param1)
以param1为原型创建一个空对象,即创建出来的对象的原型为param1
详情参考 Object.create
2、Object.defineProperty(obj, key, handler)
通过handler对象操作obj对象上的key属性
详情参考 Object.defineProperty
创建一个对象
let obj = Object.create({a:1})
obj.b = 2
Object.defineProperty(obj,"c",{
value:3
})

创建的obj上有三个属性如上,根据添加属性的方式,三个属性有如下特点
- a:为原型链上的属性,非自身属性,可枚举
- b:自身属性,可枚举
- c:为自身属性,不可枚举
获取对象身上的属性
console.log("--------------------1--------------------");
for(let i in obj){ //获取自身与原型上的可枚举属性
console.log(i) //a,b
}
console.log("--------------------2---------------------");
let xxx = Object.getOwnPropertyNames(obj) //获取自身所有属性
console.log(xxx); //[b,c]
console.log("--------------------3---------------------");
let yyy = Object.keys(obj) //获取自身可枚举属性
console.log(yyy); //[b]
console.log("--------------------4--------------------");
for(let i in obj){
obj.hasOwnProperty(i) && console.log(i) //是否是 自身可枚举属性
//b
}
通过以上四种方法(第四种为判断)得到的结果如下
由此可以简单总结为:
- for in:获取自身与原型链上的可枚举属性
- Object.getOwnPropertyNames: 获取自身所有属性
- Object.keys:获取自身可枚举属性
- hasOwnProperty:判断是否是自身可枚举属性
谢谢朋友们~
版权声明:本文为weixin_44607531原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。