앞에
라고 써있어요
때로는 여러 가지 방법으로 개체를 초기화하고 싶을 때가 있습니다. 예를 들어 생성자
의 매개변수 목록을 전달하여 초기화하는 대신 요소 배열을 통해 Set 객체를 초기화합니다.
과부하
이 생성자 메서드를 오버로드하면 전달된 다양한 매개변수에 따라 다양한 초기화 메서드를 실행할 수 있습니다.
function Set() {
이것 .values = {}; // 이 개체의 속성을 사용하여 이 컬렉션을 저장합니다.
this.n = 0; // 컬렉션의 값 수
// 유사 배열 객체가 전달되면 이 요소는 집합에 추가됩니다
// 그렇지 않으면 모든 매개변수를 집합에 추가합니다
if(arguments.length === 1 && isArrayLike(arguments[0])) {
this.add.apply (this, 인수[0]); //apply()를 사용하여 컬렉션에 객체를 추가합니다.
}else if(arguments.length > 0) {
this. add.apply(this, 인수); // 컬렉션에 모든 매개변수를 추가하려면 add() 메서드를 사용하세요.
}
}
이 코드에 정의된 Set() 생성자는 요소 집합을 매개변수 목록으로 명시적으로 전달하거나 요소 배열을 전달할 수 있습니다. 하지만 이 생성자는 모호합니다. 컬렉션의 매개변수가 배열인 경우 이 생성자를 통해 컬렉션을 생성할 수 없습니다(이를 위해서는 먼저 빈 컬렉션을 생성한 다음 명시적으로 add() 메서드를 호출해야 합니다).
팩토리 방식
클래스 메서드는 클래스의 인스턴스를 반환하는 데 사용됩니다.
// 팩토리 메소드는 Set 객체를 초기화합니다. 배열을 통해
Set.fromArray = function(arr) {
var s = new Set();
s.add.apply(s, arr);
return s;
} ;
다른 이름을 가진 팩토리 메소드는 다른 초기화를 수행하는 데 사용됩니다. 그러나 생성자는 클래스의 공개 식별자이므로 각 클래스에는 생성자가 하나만 있을 수 있습니다. 그러나 이는 반드시 따라야 하는 규칙은 아닙니다.
보조 생성자
Set()을 함수로 호출하여 이 새 객체를 초기화합니다
// Set의 보조 생성자를 정의합니다. type
function SetFromArray(arr) {
// Set()을 함수로 호출하여 이 새 객체를 초기화합니다
// arr의 요소를 매개변수로 전달
Set.apply(this, arr) ;
}
//SetFromArray가 Set 인스턴스를 생성할 수 있도록 프로토타입을 설정합니다.
SetFromArray.prototype = Set.prototype;
JavaScript에 불가능한 것은 없습니다. 예상치 못한 일만 있을 뿐입니다