본문 바로가기
javascript

Class.create()

by 새로운 도전을 위한 한걸음 2015. 5. 10.
Prototype.js 에서 내부적으로 처리되는 소스 입니다.
        
var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}


Prototype 객체 생성 방식
var Animal = Class.create();
var snake = new Animal();


기존 방식으로 보면


function Animal() {
  this.initialize = function() {
  }
  
  this.initialize();
}
var snake = new Animal();


실제 사용 예제 입니다. Prototype에서 이렇게 쓰는 의미를 찾는다면..
자주 사용하게될 소스를 미리 정의해서 쉽게 사용하자는 것, JSON 스타일의 코딩을 한다는 것.. 뭐 이정도?


기술적으로 해석하면 오브젝트가 생성되면서 자동적으로 initialize 함수를 실행(오브젝트의 초기 설정)을 하도록 처리되어진 기능


퀴즈 typeof Animal = '?' 물음표에 들어갈 내용은 무엇일까요?
퀴즈 alert(Animal) 은 무엇이 출력될까요?


var Animal = Class.create(); //Animal은 this.initialize.apply(this, arguments)를 실행하는 함수를 갖는다
Animal.prototype = {
    initialize: function(name, sound) { //초기화 부분
        this.name = name;
        this.sound = sound;
    },
    
    speak: function() {
     alert(name + " says: " + sound + "!");
    }
};
---------- ↑ Animal Class 원형 ↑--------------------------------


var snake = new Animal("Ringneck", "hissssssssss");


snake.speak(); // -> alerts "Ringneck says: hissssssssss!"

var Dog = Class.create();
Dog.prototype = Object.extend(new Animal(), {
    initialize: function(name) {
        this.name = name;
        this.sound = "woof";
    }
});