ES6-对象初始化

2020-03-13  本文已影响0人  zhenghongmo

产生一个新对象(对象初始化)

  1. var a = new Object()产生了一个空对象,有proto属性指向object

  2. var b = Object,create(null),产生了一个空对象,但是没有proto

  3. var c = Object.create(Object,prototype)产生一个空对象,有proto

  4. var d = {},产生一个空对象,有proto

属性定义

var a = 1;
var b = 2;
var obj = {
    a:a,
    b:b
} 
// obj = {a: 1,b: 2}

//转为ES6的写法
var obj = {a,b}  //a的值为a,b的值为b
var name = 'a'
var obj = {[name]:1}  //obj={a:1}
用属性放在[]中,表示引用变量

方法定义

var o ={
    _age = 18,
    get age(){return o._age},
    set age(value){
        if(value<100){
            o._age = value
        }else{
            o._age = 100
        }
    }
}

o.age   //返回18
o.age = 1000  // 0.age返回100

Object.defineProperty()

var a;
var i = 0;
Object.defineProperty(window,'a',{
    get(){
        i+=1;
        return i
    }
})

// a===1&&a===2&&a===3成立

Object,assign()

var obj1 = {a:1,b:2,c:3}
var obj2 = Object.assign({},obj1)
obj2  //{a:1,b:2,c:3}

//把obj1中的每一个key,value都复制到{}中,然后返回这个对象
//实现浅拷贝,改变obj2.a不影响obj1.a

------------------
var obj3 = {...obj1}
//实现的效果与obj2相同

writable 、configurable 、enumerable

//只写get方法,不写set方法
var o = {
    get name(){return 'leo'}
}
//将writable设为false
Object.defineProperty(o,'name',{value:'leo',writable:false})

o.name  //’leo‘
o.name = 'tom'  //o.name还是’leo‘
var o={a:1,c:3}
Object.defineProperty(o,'b',{value:2,enumerable:false})
for(let key in o){
    console.log(key)   //打印出a、c
}
上一篇 下一篇

猜你喜欢

热点阅读