JS基础之创建对象

76 阅读1分钟

创建对象的几种方式

(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)