그러나 저자 Nicholas C. Zakas는 [Dynamic Prototype] 방법을 사용하여 객체를 생성할 때 발생할 수 있는 문제와 해결 방법을 자세히 조사하지 않았습니다. 하지만 상속 중에는 [동적 프로토타입]의 병목 현상만 설명됩니다. 즉, 하위 클래스 상속이 수행될 때 동적 프로토타입을 통해서는 이를 달성할 수 없습니다.
원문은 대략 다음과 같습니다.
상속 메커니즘이 동적일 수 없는 이유는 프로토타입 객체의 고유성 때문입니다. 예제 코드:
코드는 다음과 같습니다.
코드는 다음과 같습니다.
alert(this.flag)
}
}
return __initialize ;
}();
var obj1 = new Obj('aa');
var obj2 = new Obj('bb'); // aa
obj2.showName(); //bb
실제로 위의 방법은 Obj의 생성자에서 __initialize를 통해 속성을 초기화하며, __initialize.prototype 프로토타입 초기화 방법을 사용하는 시각적 통일이라고 볼 수 있습니다. 약간 "속임수"처럼 느껴집니다. __initialize는 Obj의 초기화를 나타냅니다...
다음은 Tangoboy의 "구성된 클래스"를 캡슐화한 것입니다. 실제로 아이디어는 위와 동일합니다. 유일한 차이점은 속성도 추가한다는 점입니다. 프로토타입 모드에서 생성되었으며 초기화 속성과 메서드는 생성자 매개변수 개체에 던져졌습니다. 쉬운 사용자 정의:
/* == 형식 tangoboy == */
window['$Class'] = {
//혼합 생성자/프로토타입 메서드를 사용하여 클래스 만들기
create: function(config) {
var obj = function() {}, config = config||{};
//필터 생성자 및 프로토타입 메서드
obj = obj.prototype.constructor = config["__"]||obj>delete config["__ "] ;
obj.prototype = config;
return obj;
}
}
/* -- 예 -- */
var man = $Class.create({
__ : function (이름) {
this.name = name;
},
sex : 'male',
showName : function () {
alert(this.name );
}
});
var me = new man('ru')
me.showName() //ru
굳이 시각적 통일을 추구한다면 동적 프로토타입 없이도 달성할 수 있습니다. 결국 위의 아이디어를 살펴보면 가장 일반적으로 사용되는 "클래스 구성" 방법을 추적할 수 있습니다.
var Class = {
create : function() {
return function() {
this.initialize.apply(this, 인수);
}
}
}
위의 코드는 누구에게나 친숙할 것이라고 생각합니다. 잘 읽어보시면 실제로는 위의 코드와 일치한다는 것을 알 수 있습니다. 코드 초기화 함수는 초기화 에이전트로 사용되어 시각적 통일성을 완성합니다.