← Back to NOTES 🌰 ← Effective JavaScript 🤿
위키는 많은 콘텐츠를 생성하기 위한 간단한 텍스트 기반의 마크업 언어를 지원한다. 이런 위키 콘텐츠 작성을 위해서는 잘 구조화된 인터페이스가 필요하다.
예를 들어, 사용자가 MediaWiki 포맷을 사용하길 원한다면 (기본적인 다른 포맷들도 지원하는 상태):
var app = new Wiki(Wiki.formats.MEDIAWIKI);
// Wiki 인스턴스 객체 내부에 format을 저장
function Wiki(format){
this.format = format;
}
// 위키를 읽는 사람이 페이지를 보기를 원할 때마다 내부 포매터를 사용하여 HTML 렌더링
Wiki.prototype.displayPage = function(source) {
var page = this.format(source);
var title = page.getTitle();
var author = page.getAuthor();
var output = page.toHTML();
}
기본적인 Page 클래스 생성하고, 각 포맷별로 Page 클래스를 상속받아 구현:
function MWPage(source) {
// 부모 생성자 호출
Page.call(this, source);
// ...
}
// MWPage는 Page를 상속한다.
MWPage.prototype = Object.create(Page.prototype);
MWPage.prototype.getTitle = /* ... */
MWPage.prototype.getAuthor = /* ... */
MWPage.prototype.toHTML = /* ... */
Wiki.formats.MEDIAWIKI = function(source) {
return new MWPage(source);
}
여기서 MWPage는 위키 앱을 구현하는데 필요한 getTitle, getAuthor 등의 메서드들을 스스로 구현해야 하기에 (각 위키 포맷별로 동작이 다르므로) 실제 부모 클래스의 구현 코드를 상속받을 필요 없다.