안녕하세요송기석입니다.

 

설날이 옵니다. 고향 가시는 무사고로 다녀오시기를 바랍니다.

 

저번 주에는 프로토타입에 대하여 했습니다. 이번 주는 기본 타입에 기능 추가를 하겠습니다. 원래는 저번 주에 주제를 하려고 했는데 예제가 프로토타입에 대한 내용이 들어 있어 프로토타입을 모르면 이해하기 어렵다는 생각에 프로토타입부터 했습니다.

 

기본 타입에 기능 추가


  일단 예제부터 보겠습니다.

Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }

  위와 같이 method 메소드를 Function.prototype에 추가하면 이후 모든 함수에서 이 메소드를 사용할 수 있고 메소드를 추가할 때 ptototype 속성 이름을 사용할 필요가 없습니다.


  그럼 이를 어떻게 사용하는지 예를 보겠습니다. 자바스크립트에는 정수형이 따로 없습니다. 때때로 숫자형에서 정수부분만 추출해야 하는 경우가 생깁니다. 이 문제를 다음과 같이 Number.prototype에 integer 메소드를 추가 해서 해결할 수 있습니다.

Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; } Number.method('integer', function() { return Math[this < 0 ? 'ceiling': 'floor'](this); }); console.log((10 / 3).integer()); // 3

  다른 예로 자바스크립트에서는 문자열의 양 끝에 있는 문자열을 지우는 메소드가 없지만 다음과 같이 추가해서 사용할 수 있습니다.

Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; } String.method('trim', function() { return this.replace(/^\s+|\s+$/g, '');; }); console.log(" neat "); // " neat " console.log(" neat ".trim()); // "neat"

  이러한 방법으로 언어의 능력을 높일 수 있습니다. 하지만 기본 타입의 프로토타입은 public 구조입니다. 그러므로 다음과 같이 존재하지 않는 메소드만 추가하는 방법을 사용하여 라이브러리들을 섞어 사용할 때 방어적인 방법을 사용하는 것이 좋습니다.

Function.prototype.method = function (name, func) { if(!this.prototype[name]) { this.prototype[name] = func; return this; } }

  모두들 즐거운 설날이 되시기를 기원합니다.