ES6对象
生成空对象
1. es5
var a = new Object()
var a = {}
{
    _proto_:
}
2. es6
var a = Object.create(null)
{
}
es5 的还有原型,es6 是真正的空对象
属性定义
1. key 与属性相同可简写
var a = 1
    b = 2
var obj ={
    a,
    b
}
//
{
    a:1,
    b:2
}
2. 使用变量作为 key
es5:
var name = 'a'
var obj = {}
obj[name] = 1
{
    a:1
}
es6:
var name = 'a'
var obj = {[name]:1}
{
    a:1
}
4 方法定义
对象属性可以是一个函数,getter,setter 方法.
var obj = {
    _age:18
    get age(){return obj._age}
    set age(value){value < 100 ? obj._age = value : obj._age = 100}
}
obj.age = 1000
obj{
    age:100
}
对象拷贝
Object.assign 与…
- key 相同时,后面定义的覆盖前面的
 - 改变被拷贝对对象的属性假如是对象,只会拷贝引用地址,原对象也会改变
 - 仅拷贝可枚举对象.
 
var obj1 = {a:1,b:2,c:3,obj:{name:'a'}}
var obj2 = Object.assign({},obj1)
obj2.a = 100;
obj1.a //1
obj2.obj.name = 'b'
obj1.obj.name //b
var obj3 = {..obj1}
obj3 = {a:1,b:2,c:3}
obj3.a = 100;
obj1.a //1
var obj1 = {a:1,b:2,c:3}
var obj2 = {a:2,b:2,c:3,d4}
var obj3 = {...obj1,...obj2}
obj3 ={
    a:2,
    b:2,
    c:3,
    d4
}
Oject.definedProperty()
该方法会直接在一个对象上定义一个新属性,或修改一个属性的现有属性,并返回这个对象.
Object.definedProperty(obj,prop,descriptor)
Object.definedProperty(obj,'x',{
    get(){}
    set(value){}
})
属性描述符
- configurable
是否可再次配置,默认 false 
Object.definedProperty(o,'age',{writable:fasle})
o.age = 1;
o.age //undefined
Object.definedProperty(o,'age',{configurable:true})//报错
Object.definedProperty(o,'age',{writable:true})//报错
//刷新
Object.definedProperty(o,'age',{configurable:true})
Object.definedProperty(o,'age',{writable:fasle})
Object.definedProperty(o,'age',{writable:true})
- enumrable
是否能枚举,默认 false 
var a = [1,2,3]
for(let key in a){
    console.log(key)//0,1,2
}
Object.definedProperty(a,'0',{enumrable:fasle})
for(let key in a){
    console.log(key)//1,2
}
value
writable
属性是否可写入,默认 true
Object.definedProperty(o,'age',{writable:fasle})
o.age = 1;
o.age //undefined
- get
 
Object.definedProperty(o,'age',{get(){
    return '100'
}})
o.age = 1;
o.age //100
- set
 
Object.definedProperty(o,'age',{set(val){
    return val < 100 ? val : 100
}})
o.age = 1000;
o.age //100
Oject.definedProperties()
定义多个属性
Object.definedProperties(obj,{
    'a':{
        value:1,
        writable:true
    },
    'b':{
        value:2,
        writable:true
    }
})
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 Roxas Deng的博客!