// Write 데코레이터 팩토리
function Write(able:boolean = true) {
// Write 데코레이터
return function(t:any,p:string,d:PropertyDescriptor) {
d.writable = able;
}
}
// Button 클래스
class Button {
// 생성자
constructor(public el:HTMLButtonElement){}
// Write 데코레이터 사용
// false 전달 ⟹ 쓰기 불가
@Write(false)
disable(){ this.el.setAttribute('disabled', 'disabled'); }
}
// Button 객체 인스턴스 생성 및 변수 참조
const btn = new Button( <HTMLButtonElement>document.querySelector('.button') );
// [오류]
// 쓸 수 없는 메서드를 쓰려고 하였기에 쓸 수 없다고 오류 메시지를 출력합니다.
// Uncaught TypeError:
// Cannot assign to read only property 'disable' of object '#<Button>'
btn.disable = function() { console.log(this); };