객체지향 자바스크립트
자바스크립트는 애초부터 완벽히 객체지향 언어로 설계되었다고 하는데...
그래서 찾아본 것은 생성자 + Prototype으로 이어지는 확장.
요약
특정 클래스의 인스턴스가 어디에 기초하여 만들어진 것인지 나타내는 값. 생성자 함수를 호출함으로써 생성할 수 있는 모든 개체는 prototype 속성을 갖는다.
설명
존재하는 클래스의 생성자 함수에 연관된 prototype에 속성이나 메소드를 추가함으로써 그 클래스에 새로운 속성이나 메소드를 추가할 수 있다.
fun.prototype.name = value
fun : 바꾸고자 하는 생성자 함수 개체의 이름
name : 새로 만든 속성이나 메소드 이름
value : 새 속성이나 메소드에 할당할 초기값
개체의 프로토타입에 속성을 추가하면, 그 개체의 생성자 함수를 사용해서 만든 모든 개체가 새 속성을 갖게된다.
다음 코드를 보면
prototy에 속성을 설정한 후에는, Array로 만든 모든 개체는 그 속성을 갖게 된다.
prototype 또한 개체이므로, 개체 상수값 문법을 이용해서 속성과 메소드를 할당할 수 있다.
예제
다음 예제는 str_rep라는 메소드를 만들어서 String.prototype.rep = str_rep 문장을 사용하여 모든 String 개체에 메소드를 추가한다. new String()으로 만든 개체는 모두 그 메소드를 갖게 된다. 이미 만들어져 있는 개체들까지도 그 메소드를 갖게된다. 그리고 s1.rep = fake_rep라는 문장으로 String 개체 중의 하나는 다른 메소드로 바꾼다. 그러나 다른 String 개체들은 rmeofh str_rep 메소드를 사용한다.
이 예제에 있는 함수는 String 생성자로 만들지 않은 String 개체에도 동작한다. 다음 코드는 "zzz"를 반환한다.
출처
https://developer.mozilla.org/ko/Core_JavaScript_1.5_Reference/Global_Objects/Function/prototype#.ec.9a.94.ec.95.bd
자바스크립트는 애초부터 완벽히 객체지향 언어로 설계되었다고 하는데...
그래서 찾아본 것은 생성자 + 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