'prototype'에 해당되는 글 1건

  1. 2008.11.26 Prototype

Prototype

JavaScript 2008. 11. 26. 14:11
객체지향 자바스크립트
자바스크립트는 애초부터 완벽히 객체지향 언어로 설계되었다고 하는데...
그래서 찾아본 것은 생성자 + Prototype으로 이어지는 확장.

요약

특정 클래스의 인스턴스가 어디에 기초하여 만들어진 것인지 나타내는 값. 생성자 함수를 호출함으로써 생성할 수 있는 모든 개체는 prototype 속성을 갖는다.

설명

존재하는 클래스의 생성자 함수에 연관된 prototype에 속성이나 메소드를 추가함으로써 그 클래스에 새로운 속성이나 메소드를 추가할 수 있다.

fun.prototype.name = value

fun : 바꾸고자 하는 생성자 함수 개체의 이름
name : 새로 만든 속성이나 메소드 이름
value : 새 속성이나 메소드에 할당할 초기값

개체의 프로토타입에 속성을 추가하면, 그 개체의 생성자 함수를 사용해서 만든 모든 개체가 새 속성을 갖게된다.

다음 코드를 보면

 var array1 = new Array();
 var array2 = new Array();
 Array.prototype.description = null;
 array1.description = "Contains some stuff";
 array2.description = "Contains other stuff";

prototy에 속성을 설정한 후에는, Array로 만든 모든 개체는 그 속성을 갖게 된다.

 anotherArray = new Array();
 anotherArray.description = "Currently empty";

prototype 또한 개체이므로, 개체 상수값 문법을 이용해서 속성과 메소드를 할당할 수 있다.

 function MyFunction() {
    alert("Created.");
 }

 MyFunction.prototype = {
    alert1: function(str) {
       alert(str);
    },

    fire: 5,

    alert2: function() {
       alert("Hi.");
    }
 };

 var myObject = new MyFunction();
 myObject.alert1("There.");
 myObject.fire;
 myObject.alert2();

예제

다음 예제는 str_rep라는 메소드를 만들어서 String.prototype.rep = str_rep 문장을 사용하여 모든 String 개체에 메소드를 추가한다. new String()으로 만든 개체는 모두 그 메소드를 갖게 된다. 이미 만들어져 있는 개체들까지도 그 메소드를 갖게된다. 그리고 s1.rep = fake_rep라는 문장으로 String 개체 중의 하나는 다른 메소드로 바꾼다. 그러나 다른 String 개체들은 rmeofh str_rep 메소드를 사용한다.

 var s1 = new String("a");
 var s2 = new String("b");
 var s3 = new String("c");

 // 모든 String 개체에 문자열을 N번 반복한 새 문자열을 만드는 메소드를 만든다.
 function str_rep(n) {
    var s = "", t = this.toString();
    while (--n >= 0) s += t;
   
    return s;
 }

 String.prototype.rep = str_rep;

 s1a = s1.rep(3);
 s2a = s2.rep(5);
 s3a = s3.rep(2);

 // 다른 메소드를 만들고, 하나의 String 변수에만 할당한다.
 function fake_rep(n) {
     return "repeat " + this + " " + n + " times.";
 }

 s1.rep = fake_rep;
 s1b = s1.rep(1);
 s2b = s2.rep(4);
 s3b = s3.rep(6);

이 예제에 있는 함수는 String 생성자로 만들지 않은 String 개체에도 동작한다. 다음 코드는 "zzz"를 반환한다.

 "z".rep(3);

출처
https://developer.mozilla.org/ko/Core_JavaScript_1.5_Reference/Global_Objects/Function/prototype#.ec.9a.94.ec.95.bd
Posted by glycerine
,