1、Object.create(prototype[,propertiesObject])
使用指定的原型对象及其属性去创建一个新的对象
示例1
let a = {
age:18,
name:'wang'
}
let b = Object.create(a)
b.addr = 'beijing'
/**
* 也可以在创建对象时添加属性
let d = Object.create(a,{
sex:{
value:'boy',
writable:false
}
})
*/
console.log(b)
//output:{ addr: 'beijing' },也可以直接通过b.age访问继承的属性
2、Object.defineProperties(obj,props) / Object.defineProperty(obj,prop,descriptor)
直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
示例1
let a = {
age:18,
name:'wang'
}
//修改属性
Object.defineProperty(a,'age',{
value:20
})
//添加新属性
Object.defineProperty(a,'sex',{
value:'boy',
enumerable:true,
writable: true,
})
console.log(a)
//output:{ age: 20, name: 'wang', sex: 'boy' }
示例2
let a = {
age:18,
name:'wang'
}
Object.defineProperties(a,{
age:{
value:20
},
name:{
value:'zhang'
}
})
Object.defineProperties(a,{
sex:{
value:'boy',
enumerable:true,
writable: true,
}
})
console.log(a)
//output:{ age: 20, name: 'zhang', sex: 'boy' }
3、Object.keys(obj)/Object.values()/Object.entries()
返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)
let a = {
age:18,
name:'wang'
}
let b = Object.keys(a)
let c = Object.values(a)
console.log(b)
console.log(c)
/**分别返回一个由key和values组成的数组
output:
[ 'age', 'name' ]
[ 18, 'wang' ]
*/
let d = Object.entries(a)
console.log(d)
//output:[ [ 'age', 18 ], [ 'name', 'wang' ] ]
4、hasOwnProperty()
let a = {
age:18,
name:'wang'
}
let c = Object.create(a)
c.addr = 'beijing'
console.log(c.hasOwnProperty('addr'))
console.log(c.hasOwnProperty('age'))
//output:true false
//只有自身拥有的属性才会true