var book = { _year: 2018, edition: 1 }; // _year 의 값을 직접 쓸수 없게 함 Object.defineProperty(book, "_year", { writable: false }); // year 프로퍼티를 생성하여 _year의 속성에 접근 Object.defineProperty(book, "year", { get: function() { return this._year; // _year의 값을 반환. }, set: function(newValue) { if (newValue > 2018) { // 저장하려는 값이 2018보다 커야 저장. // this._year = newValue; 이런식으로 직접변경이 안됨 // defineProperty 메서드를 사용해서 변경 Object.defineProperty(this, "_year", { value: newValue }); this.edition += newValue - 2018; // 올바른 edition을 반환하기 위해 약간 계산. } } }); book.year = 2020; // edition의 값도 같이 변경됨 document.write(book.year + "<br>"); // 2020 document.write(book.edition + "<br>"); // 3