생성자 패턴을 사용하여 팩토리 패턴을 다시 작성하겠습니다.
function Employee(이름, 나이, 직업) {
this.name = 이름;
this.age = age;
this.job = job; 🎜>} ;
}
var Jim = new Employee("jim", 22, "소프트웨어 엔지니어")
var Sun = new Employee("Sun", 24, "Doctor"); 🎜>Jim .sayName();
Sun.sayName();
위 코드에서 Employee 함수는 CreateEmployee 함수를 대체합니다.
없음 표시된 생성된 개체
는 반환 문 없이
이 개체에 속성과 메서드를 직접 할당합니다.
Employee 클래스의 새 인스턴스를 만들려면 new 연산자를 사용해야 합니다. 이는 실제로 4단계로 구성됩니다.
새 객체 만들기
생성자의 범위를 새 객체에 할당
생성자에서 코드 실행
새 객체 반환
마지막으로 Jim과 Sun 위 코드에서는 두 개의 서로 다른 Employee 값을 저장합니다. 두 인스턴스에는 모두 Employee를 가리키는 생성자 속성이 있습니다.
코드 복사
코드는 다음과 같습니다. alert(Jim 인스턴스of Employee); //true alert(Sun 인스턴스of Employee);//true
동시에 이 두 객체는 모두 Object 유형이며 다음 코드를 통해 감지할 수 있습니다.
코드 복사
코드는 다음과 같습니다. alert(Jim instanceof Object) // true alert(Sun 인스턴스of Object);//true
사용자 정의 생성자를 생성한다는 것은 나중에 해당 인스턴스가 특정 유형으로 표시될 수 있음을 의미하며 이는 생성자이기도 합니다. 패턴은 팩토리 패턴보다 성능이 뛰어납니다.
다음은 생성자에 대해 자세히 설명합니다.
생성자를 함수로 취급합니다
생성자와 다른 함수의 유일한 차이점은 호출 방식입니다. 그러나 생성자도 함수이므로 생성자를 정의하는 데 특별한 구문이 없습니다. 실제로 모든 함수는 new를 통해서만 호출할 수 있으며 생성자로 사용할 수 있습니다. 예를 들어 위의 new 메서드를 사용하여 Employee를 호출하는 것 외에도 다음과 같은 방법으로 호출할 수도 있습니다.
코드 복사
코드는 다음과 같습니다. //Call Employee(" 일반 기능으로" Sun", 28, "SoftWare Engineer"); //창에 추가
window.sayName();//Sun
코드 복사
o.sayName();//Sum
생성자 문제
생성자를 사용하는 것은 각 강도에 대해 다시 생성한다는 것입니다. 위의 두 개체에 있는 sayName 메서드는 실제로 다른 함수의 인스턴스입니다.
alert(Jim.sayName == Sun.sayName); //false
그러나 동일한 작업을 완료하는 두 개의 함수 인스턴스를 생성하므로 위 함수를 다음과 같이 다시 작성합니다
코드 복사
this.age = age
this.job = job; ;
this.sayName =sayName;
}
function sayName() {
alert(this.name)
}
이것은 다음과 같은 문제를 해결합니다. 두 함수 같은 문제지만 또 새로운 문제가 발생합니다. 전역 범위에 정의된 이 함수는 실제로 특정 개체에서만 참조할 수 있으며, 가장 끔찍한 문제는 개체가 많은 메서드를 정의해야 하는 경우 필요하다는 것입니다. 많은 전역 함수를 정의하기 위해 이 사용자 정의 참조 유형에는 캡슐화가 전혀 없습니다.