Search
Duplicate

getter, setter

getter

getter로 선언된 함수를 자동으로 호출합니다. getter는 값을 반환하는 시맨틱을 가지고 있기에 getter 함수에서 값을 반환해야 합니다.
1.
ES5형태
⇒ book.title을 실행하면 title 프로퍼티에서 get속성의 존재를 체크합니다. 이때 프로퍼티가 있으면 get()함수를 호출합니다.
여기서 book.title.get()으로호출하면 에러가 발생합니다. 이는 ES5의 Descriptor를 참고하시면 됩니다.
var book = {}; Object.defineProperty(book, "title", { get: function(){ return "책"; } }); console.log(book.title);//책
JavaScript
복사
2. ES6형태
⇒get getPoint(){ }와 같이 getPoint() 앞에 get을 작성하면 getter로 선언됩니다. 그래서 getPoint()함수가 자동으로 호출됩니다.
ES6장점
ES5처럼 프로퍼티의 속성 구조가 아닙니다.
작성이 편리하며 다수의 getter사용도 가능합니다.
const book = { point: 100, get getPoint(){ return "포인트"; }, get getTitle(){ return "제목"; } }; console.log(book.getPoint);//포인트 console.log(book.getTitle);//책
JavaScript
복사
const book = { point: 100, get getPoint(){ return this.point; } }; console.log(book.getPoint);
JavaScript
복사

setter

프로퍼티에 값을 할당하면 setter로 선언된 함수가 자동으로 호출되는데 이는 setter가 값을 설정하는 시맨틱을 가지고 있기에 setter함수에서 값을 설정해줘야 합니다.
1.
ES5형태
⇒ book.change = "자바스크립트"를 실행하면 change프로퍼티에서 set 속성의 존재 여부를 체크합니다. 있을 경우 set()함수를 호출하고 "자바스크립트"를 파라미터 값으로 넘겨줍니다.
var book = {title: "HTML"}; Object.defineProperty(book, "change", { set: function(param){ this.title = param; } }); book.change = "자바스크립트"; console.log(book);//{title: 자바스크립트}
JavaScript
복사
2. ES6형태
⇒ setPoint()앞에 set을 작성하면 setter로 선언됩니다.
⇒ book.setPoint = 200; setPoint에 값을 할당하면 setPoint()가 자동으로 호출되어 파라미터값으로 200을 넘겨줍니다.
const book = { point: 100, set setPoint(param){ this.point = param; } }; book.setPoint = 200; console.log(book.point);//200
JavaScript
복사
3. 변수값을 함수 이름으로 사용
⇒ name 변수값인 "setPoint"가 함수이름으로 사용됩니다.
getter역시 같은 방법으로 사용이 가능합니다.
const name = "setPoint"; const book = { point: 100, set [name](param){ this.point = param; } }; book[name] = 200; console.log(book.point);//200
JavaScript
복사
setter 삭제
⇒ delete 연산자로 setter를 삭제할 수 있습니다.
const name = "setPoint"; const book = { point: 100, set [name](param){ this.point = param; } }; delete book[name]; console.log(book[name]);//undefined
JavaScript
복사