자바스크립트 팩토리 방식 기본 방식
객체가 생성된 후에 객체의 속성을 동적으로 정의할 수 있기 때문에 JavaScript가 처음 소개되었을 때 다음과 유사한 코드가 작성되었습니다.
다음과 같이 코드 코드를 복사합니다.
var oCar = 새 객체;
oCar.color = "파란색";
oCar.doors = 4;
oCar.mpg = 25;
oCar.showColor = function() {
경고(this.color);
};
위 코드에서는 자동차 객체가 생성됩니다. 그런 다음 몇 가지 속성을 지정하십시오. 파란색이고 문이 4개 있으며 갤런당 25마일을 주행합니다. 마지막 속성은 실제로 함수에 대한 포인터입니다. 즉, 속성이 메서드라는 의미입니다. 이 코드를 실행한 후 객체 car를 사용할 수 있습니다. 그러나 여기에는 문제가 있습니다. 즉, 자동차 인스턴스를 여러 개 생성해야 할 수도 있다는 것인데 이는 분명히 좋은 방법이 아닙니다.
해결책: 팩토리 메소드
이 문제를 해결하기 위해 개발자는 특정 유형의 객체를 생성하고 반환하는 팩토리 함수를 만들었습니다. 예를 들어, createCar() 함수를 사용하면 이전에 나열된 자동차 객체 생성 작업을 캡슐화할 수 있습니다.
다음과 같이 코드 코드를 복사합니다.
함수 createCar(sColor,iDoors,iMpg) {
var oTempCar = 새 개체;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = function() {
경고(this.color);
};
oTempCar를 반환합니다.
}
var oCar1 = createCar("빨간색",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); //"빨간색" 출력
oCar2.showColor(); //"파란색" 출력
이 팩토리 함수를 호출하면 새 객체가 생성되고 필요한 모든 속성이 부여됩니다. createCar() 함수에 매개변수를 추가하여 생성할 자동차 객체의 색상, 문 및 mpg 속성에 값을 할당합니다. 이렇게 하면 두 객체가 동일한 속성을 가지지만 속성 값은 달라집니다. 이 메서드의 나쁜 점은 자동차 객체가 생성될 때마다(즉, createCar 함수가 한 번 호출될 때마다) 각 객체에 대해 showColor 메서드가 반복적으로 생성된다는 것입니다. 실제로 각 객체는 동일한 것을 공유합니다. 기능. . 그래서 우리는 함수 외부에서 메소드 속성을 선언하려고 합니다.
팩토리 함수 외부에서 객체 메서드 정의
일부 개발자는 팩토리 함수 외부에서 객체의 메서드를 정의한 다음 속성을 통해 메서드를 지정하여 이 문제를 방지합니다.
다음과 같이 코드 코드를 복사합니다.
함수 showColor() {
경고(this.color);
}
함수 createCar(sColor,iDoors,iMpg) {
var oTempCar = 새 개체;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
oTempCar를 반환합니다.
}
var oCar1 = createCar("빨간색",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); //"빨간색" 출력
oCar2.showColor(); //"파란색" 출력
위의 재작성된 코드에서 showColor() 함수는 createCar() 함수 이전에 정의되었습니다. createCar() 내에서 객체에는 기존 showColor() 함수에 대한 포인터가 제공됩니다. 기능적으로는 함수 객체를 반복적으로 생성하는 문제를 해결하지만 의미상으로는 함수가 객체의 메서드처럼 보이지 않습니다.