创建对象的几种方式
(1)字面量
const obj = {age:18}
(2)构造函数
注意:
参数为null或undefined,则返回空对象;
参数为基本数据类型,则返回其包装类型;
参数为引用数据类型对象,则返回这个对象。
const obj = {age:18}
const newObj = new Object(obj)
(3)Object.create(原型对象,属性描述符)
// 若 Object.create()的参数为null或undefined,则返回一个空对象
const obj = Object.create(null)
console.log(obj) // {}
// 当writable为true时,obj的属性值才能被改变,writable不能和get、set同时使用
const obj = Object.create({},{
//定制化属性
name:{
value:'jack',
writable:true
}
})
console.log(obj)
// 通过get和set去设置修改属性值
let globalName = 'jack'
const obj = Object.create({},{
//定制化属性
name:{
set(newName){
console.log('name值被修改了')
globalName = newName
},
get(){
console.log('获取到了name值',globalName)
return globalName
}
}
})
console.log(obj)
// configurable 为true时才能改变属性,可以使用delete删除属性
// 仅当该属性的 enumerable 为true时,该属性才会出现在对象的枚举属性中。
const obj = Object.create({},{
name:{
value:'jack',
configurable:true,
enumerable:true
},
age:{
value:1,
configurable:true,
enumerable:true
}
})
console.log(Object.keys(obj)) // [name,age]
delete obj.name // configruable 为true可删除
for(let key in obj){
console.log('key',key) // age
console.log('value',obj[key]) // 1
}
// Object.defineProperty(obj,prop,descriptor)
// 在一个对象上定义一个新属性,或修改一个对象的现有属性,并返回此对象
const obj = {name:'jack'}
Object.defineProperty(obj,'name',{
value:'tom',
writable:true,
configurable:true,
enumerable:true
})
console.log(obj.name) // tom
(4)Object.assign( )对属性的附加
const obj = Object.assign({a:1},{b:2})
console.log(obj) // {a: 1, b: 2}
(5)使用构造器创建
let obj1 = {a:1};
let obj2 = new obj1.constructor();
console.log(obj2)