>웹 프론트엔드 >JS 튜토리얼 >팩토리 패턴 설명 자바스크립트 디자인 패턴 예시_기본지식

팩토리 패턴 설명 자바스크립트 디자인 패턴 예시_기본지식

WBOY
WBOY원래의
2016-05-16 16:57:081203검색


코드 복사

코드는 다음과 같습니다.var oCar = new Object; oCar.color = "파란색";oCar.doors = 4;
oCar.mpg = 25;
oCar.showColor = function() {
Alert(this.color);
};



위 코드에서 자동차 객체를 생성합니다. 그런 다음 몇 가지 속성을 지정하십시오. 파란색이고 문이 4개 있으며 갤런당 25마일을 주행합니다. 마지막 속성은 실제로 함수에 대한 포인터입니다. 즉, 속성이 메서드라는 뜻입니다. 이 코드를 실행한 후 객체 car를 사용할 수 있습니다. 그러나 여기에는 문제가 있습니다. 즉, 자동차 인스턴스를 여러 개 생성해야 할 수도 있다는 것인데 이는 분명히 좋은 방법이 아닙니다.

해결책: 팩토리 메소드

이 문제를 해결하기 위해 개발자는 특정 유형의 객체를 생성하고 반환하는 팩토리 함수를 만들었습니다. 예를 들어 createCar() 함수를 사용하면 이전에 나열된 자동차 객체 생성 작업을 캡슐화할 수 있습니다.


코드 복사

코드는 다음과 같습니다.function createCar(sColor,iDoors,iMpg) { var oTempCar = 새 개체; oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = function() {
경고( this.color);
};
return oTempCar;
}

var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);

oCar1.showColor(); //"빨간색" 출력oCar2.showColor() //"파란색" 출력


이 팩토리 함수를 호출하여 새 객체를 생성하고 필요한 모든 속성을 지정합니다. createCar() 함수에 매개변수를 추가하면 생성할 자동차 객체의 색상, 문 및 mpg 속성에 값을 할당할 수 있습니다. . 이렇게 하면 두 객체가 동일한 속성을 가지지만 속성 값은 달라집니다. 이 메서드의 나쁜 점은 자동차 객체가 생성될 때마다(즉, createCar 함수가 한 번 호출될 때마다) 각 객체에 대해 showColor 메서드가 반복적으로 생성된다는 것입니다. 실제로 각 객체는 동일한 것을 공유합니다. 기능. . 그래서 우리는 함수 외부에서 메소드 속성을 선언하려고 합니다.

팩토리 함수 외부에서 객체 메서드 정의

일부 개발자는 팩토리 함수 외부에서 객체 메서드를 정의한 다음 이 문제를 피하기 위해 속성을 통해 메서드를 가리킵니다.


코드 복사

코드는 다음과 같습니다.function showColor() { Alert (this.color);}
function createCar(sColor,iDoors,iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors; oTempCar.mpg = iMpg;

oTempCar.showColor = showColor;
return oTempCar;
}

var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);

oCar1.showColor(); //"빨간색" 출력

oCar2.showColor() //"파란색" 출력


위의 다시 작성된 코드에서 showColor() 함수는 createCar() 함수 앞에 정의되어 있습니다. createCar() 내에서 객체에는 기존 showColor() 함수에 대한 포인터가 제공됩니다. 기능적으로는 함수 객체를 반복적으로 생성하는 문제를 해결하지만 의미상으로는 함수가 객체의 메서드처럼 보이지 않습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.