구성 방법
함수 코더()
{
this.name = 'Modern Magic';
this.job = '웹 개발자';
this.coding = function ()
{ Alert('코드를 작성 중입니다. '); }
}
var coder = new coder();
alert(coder.name);
coder.coding();
팩토리 메소드
function createCoderFactory()
{
var obj = new Object() ;
obj.name = 'Modern Magic';
obj.job = 'Programmer';
obj.coding = function ()
{
Alert('코드를 작성 중입니다.' );
};
return obj;
}
var coder = createCoderFactory();
alert(coder.name);
coder.coding();
팩토리 메소드와 생성자 메소드 모두 동일한 단점을 가지고 있습니다. 즉, 인스턴스가 생성될 때마다 클래스의 각 함수가 인스턴스화된다는 것입니다.
프로토타입 체인
function coder() {}
coder.prototype.name = 'Modern Magic';
coder.prototype.job = '프로그래머';
coder.prototype.coding = function(){
Alert('저는 코드 작성 ');
};
var coder = new coder();
alert(coder.name);
coder.coding();
프로토타입 체인의 한 가지 단점은 하나의 인스턴스가 변경되는 한 다른 인스턴스도 그에 따라 변경된다는 것입니다. 예:
var coder1 = new coder();
var coder2 = new coder();
alert(coder1.name); /*현대적인 마법 표시*/
coder2.name = 'nowamagic';
alert(coder1.name); Show nowamagic* /
alert(coder2.name); /*이것도 nowamagic을 보여줍니다*/
혼합 방식
위 세 가지 모두 단점이 있으므로 개선이 필요합니다. .
function coder()
{
this .name = 'Modern Magic';
this.job = 'Programmer';
}
coder.prototype.coding = function(){
Alert('코드를 작성 중입니다. ');
};
동적 오리지널 체인
처음 세 가지 단점을 해결하는 또 다른 방법이 있습니다.
function coder()
{
this .name = 'Modern Magic';
this.job = 'Programmer';
if (typeof(coder._init) == 'undefine')
{
this.coding = 기능 ( :)