문제는 주로 문체로 구성되어 있기 때문에 (생성 된 선언으로 생성자를 채우지 않으려는 경우) 문체 적으로 해결할 수 있습니다.
내가 보는 방식으로, 많은 클래스 기반 언어는 생성자가 클래스 이름 자체의 이름을 딴 함수입니다. 스타일 적으로 우리는 그것을 스타일에 따라 이해하는 ES6 클래스를 만들기 위해 사용할 수 있지만 생성자에서 발생하는 일반적인 동작을 우리가 수행하는 모든 속성 선언과 그룹화하지는 않습니다. 우리는 단순히 실제 JS 생성자를 "선언 영역"으로 사용하고, 그렇지 않으면 "다른 생성자 항목"영역으로 취급하는 함수라는 클래스를 만들어 실제 생성자의 끝에서 호출합니다.
"엄격한 사용";
MyClass 클래스
{
// 속성을 선언 한 다음 this를 호출합니다 .ClassName (); 여기에서
건설자(){
this.prop1 = 'blah 1';
this.prop2 = 'blah 2';
this.prop3 = 'blah 3';
this.MyClass ();
}
// 더 이상 선언과 혼동되지 않는 모든 종류의 다른 "생성자"항목
내 수업() {
무엇이든해라();
}
}
새 인스턴스가 생성되면 둘 다 호출됩니다.
Sorta는 선언과 다른 생성자 작업을 분리하는 2 개의 생성자를 갖는 것과 같으며 문체 적으로 이해하기가 너무 어렵지 않습니다.
인스턴스화에서 발생해야하는 두 가지 선언 및 / 또는 많은 작업을 처리 할 때 사용하고 두 아이디어를 서로 구별되게 유지하려는 경우 사용하기에 좋은 스타일입니다.
참고 : 나는 매우 의도적으로 (AN처럼 "초기화"의 전형적인 관용적 아이디어를 사용하지 않는 init()
또는 initialize()
사람들은 종종 다르게 사용되기 때문에 방법). 구성과 초기화라는 아이디어에는 약간의 차이가 있습니다. 생성자와 함께 작업하면 사람들은 인스턴스화의 일부로 자동 호출된다는 것을 알고 있습니다. init
많은 사람들이의 형태로 무언가를 수행해야한다고 생각 하는 방법을 많은 사람들이 한 번에 var mc = MyClass(); mc.init();
알지 못합니다. 내가 클래스의 사용자에 대한 초기화 과정을 추가하려고 아니에요, 내가 추가하려고 해요 에 클래스 자체의 건설 과정.
어떤 사람들은 잠깐 동안 이중 복용을 할 수도 있지만 실제로는 약간의 요점입니다. 그것은 의도가 건설의 일부라는 것을 의사 소통합니다. 어떻게 ES6 생성자가 작동하는지 "를 확인하고 실제 생성자를보고"오, 그들은 맨 아래에서 호출합니다. 알겠습니다 ", 그 의도를 전달하지 않거나 잘못 전달하는 것보다 훨씬 낫습니다. 사람들이 그것을 잘못 사용하고 외부와 정크에서 초기화하려고합니다. 그것은 내가 제안하는 패턴에 매우 의도적입니다.
그 패턴을 따르고 싶지 않은 사람들에게는 그 반대도 효과가 있습니다. 처음에 선언을 다른 함수로 작성하십시오. "properties"또는 "publicProperties"또는 다른 이름으로 지정할 수 있습니다. 그런 다음 나머지는 일반 생성자에 넣습니다.
"엄격한 사용";
MyClass 클래스
{
properties () {
this.prop1 = 'blah 1';
this.prop2 = 'blah 2';
this.prop3 = 'blah 3';
}
constructor () {
this.properties ();
무엇이든해라();
}
}
이 두 번째 방법은 더 깔끔해 보일 수 있지만 properties
이 방법을 사용하는 한 클래스가 다른 클래스를 확장함에 따라 재정의 되는 고유 한 문제도 있습니다 . properties
이를 피하려면 더 고유 한 이름 을 지정해야합니다. 첫 번째 방법에는 생성자의 가짜 절반이 클래스 이름을 따서 고유하게 지정 되므로이 문제가 없습니다.
this.member = member
생성자에서 20-30 개의 매개 변수를 반복 사용한다는 것입니다 .