의사 클래스 방식 (Pseudoclassical)
자바스크립트는 프로토타입적 본성에 맞게 객체에서 다른 객체로 직접 상속하는 방법을 갖는 대신에 생성자 함수를 통해 객체를 생성하는 것과 같은 불필요한 간접적인 단계가 있다
함수 객체가 만들어질 때, 함수를 생성하는 Function 생성자는 다음과 같은 코드를 실행한다
this.prototype = {constructor: this};새로운 함수 객체는, 새로운 함수 객체를 값으로 갖는 constructor라는 속성이 있는 객체를 prototype 속성에 할당받는다
new 연산자를 사용하여 생성자 호출 패턴으로 함수가 호출되면 함수가 실행되는 방법이 변경된다. 만약 new 연산자가 메소드였다면 아마 다음과 같이 구현됐을 것이다.
Function.method('new', function() {
// 생성자의 프로토타입을 상속받는 새로운 객체 생성
var that = Object.create(this.prototype);
// this를 새로운 객체에 바인딩하면서 생성자 호출
var other = this.apply(that, arguments);
// 반환값이 객체가 아니면, 새로운 객체로 대체
return (typeof other === 'object' && other) || that;
});Last updated
Was this helpful?