먼저 예를 살펴보겠습니다.
이것은 많은 jser에서 클래스를 구성하고 객체를 인스턴스화하는 프로세스입니다. 인스턴스화된 a에는 추가 초기화 방법이 있습니다. 인스턴스화 중에 초기화가 프록시로 사용되면 인스턴스화 후에는 의미가 없으며 때로는 불필요한 문제가 발생합니다. 예를 들어 for...in 문이 a를 순회하면 초기화 메서드도 순회하게 됩니다.
가장 먼저 생각난 것은 이전 블로그 포스팅에 쓴 Class.js를 사용하는 것인데 굉장히 깔끔합니다. 그러나 Class.js의 상속 메커니즘에는 몇 가지 버그가 있습니다. 침입 없이(즉, 프로토타입을 수정하거나 추가 속성을 생성하지 않고) 인터페이스를 구현하는 것은 훨씬 더 어렵습니다. 그래서 new 연산자를 캡슐화하는 방법을 생각하게 되었습니다. 이것의 장점은 프로토타입을 먼저 수정할 수 있고, new를 캡슐화하는 방식으로 상속과 인터페이스를 구현할 수 있고, 추가 속성을 제거할 수 있다는 것입니다.
먼저 new 연산자의 간단한 구현을 구현해 보겠습니다.
function New(){//new는 키워드이므로 구별하세요.
var as = [],args = 인수
for(var i=1;i
as.push('args[' i ']');
}
nobj = eval("new args[0](" as.join(",") "); ") ;
return nobj;
}
다음 테스트:
function A(n){ this.name = n;}
var a1 = new A('ts');
alert(a1.name);//ts
var a2 = New(A,'tangoboy');
alert(a2.name);//tangoboy
테스트가 성공했습니다. New 메소드는 기본적으로 new 연산자 대신 객체를 인스턴스화할 수 있습니다.
글 시작 부분에 있는 초기화 문제를 해결하는 것은 매우 간단합니다.
function New(){
var as = [],args =
for(var i=1; ;ias.push('args[' i ']')
}
nobj = eval("new args[0](" as.join( ",") " );");
delete nobj.initialize;//인스턴스화된 객체의 메소드 삭제
return nobj;
다음 섹션이 시작됩니다. 새로운 방법을 풍부하게 합니다.