ES5에서는 객체부분을 많이 보완했음

● Object.defineProperty(객체명, 속성명, {옵션}) : 객체를 생성하는 함수

    Object.defineProperties(객체명, {속성명1 : {옵션1, 옵션2}, {속성명2 : {옵션1, 옵션2}, ….})

let object = {};
Object.defineProperty(object, 'name', {
    value : 'RintIanTta',
    writable : false,
    enumerable : false,
});

let object2 = {};
Object.defineProperty(object2, 'name', {
    get : function () {
        alert('getter');
        return value; 
    },
    set : function (newValue) {
        alert('setter');
        value = newValue;
    }
});

let object3 = {};
Object.defineProperties(object3, {
    name : {
        value : 'RintIanTta',
        writable : true
    },
    gender : {
        value : 'Male'
    }
});

→ object라는 객체 안에 name이라는 속성을 생성, 옵션으로 value, writable, enumerable, getter, setter 등을 설정함.

○ 옵션

 - value : 속성 값

 - writable : 수정여부

 - enumerable : Iterator 사용가능 여부

 - configurable : 속성 옵션값 수정 여부

 - get : getter, value와 함께 사용 할 수 없음.

 - set : setter, value와 함께 사용 할 수 없음.

● Object.create(객체명, {속성명1 : {옵션1, 옵션2}, {속성명2 : {옵션1, 옵션2}, …})

 - 함수를 이용하여 객체 생성

 - 객체명 자리에 프로토타입 객체를 입력하면 그 객체를 상속 받을 수 있음

// 생성
let object5 = Object.create({}, {
    name : {
        value : 'RintIanTta',
        enumerable : true
    },
    gender : {
        value : 'Male'
    }
});

// 상속
function Person() {
    this.name = 'anonymous';
}
function Unikys() {
    this.name = 'Unikys';
}

let person = new Person();
let unikys = Object.create(person, {
    hobby : {
        value : 'nap'
    }
});

● Object.preventExtensions(객체명) :동적 속성추가 제한

    Object.isExtensible(객체명) : 동적 속성추가 제한여부 확인

●Object.seal(객체명) :동적 속성삭제 제한

    Object.isSealed(객체명) : 동적 속성삭제 제한여부 확인

● Object.keys(객체명) :객체의 속성명으로 배열 생성

    Object.getOwnPropertyNames(객체명) : 객체의 모든 속성명으로 배열 생성