이 문제를 해결하기 위해 개발자는 특정 유형의 객체를 생성하고 반환하는 팩토리 함수를 만들었습니다. 예를 들어 createCar() 함수를 사용하면 이전에 나열된 자동차 객체 생성 작업을 캡슐화할 수 있습니다.
이 팩토리 함수를 호출하여 새 객체를 생성하고 필요한 모든 속성을 지정합니다. createCar() 함수에 매개변수를 추가하면 생성할 자동차 객체의 색상, 문 및 mpg 속성에 값을 할당할 수 있습니다. . 이렇게 하면 두 객체가 동일한 속성을 가지지만 속성 값은 달라집니다. 이 메서드의 나쁜 점은 자동차 객체가 생성될 때마다(즉, createCar 함수가 한 번 호출될 때마다) 각 객체에 대해 showColor 메서드가 반복적으로 생성된다는 것입니다. 실제로 각 객체는 동일한 것을 공유합니다. 기능. . 그래서 우리는 함수 외부에서 메소드 속성을 선언하려고 합니다.
일부 개발자는 팩토리 함수 외부에서 객체 메서드를 정의한 다음 이 문제를 피하기 위해 속성을 통해 메서드를 가리킵니다.
oTempCar.showColor = showColor;
return oTempCar;
}
var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor(); //"빨간색" 출력
위의 다시 작성된 코드에서 showColor() 함수는 createCar() 함수 앞에 정의되어 있습니다. createCar() 내에서 객체에는 기존 showColor() 함수에 대한 포인터가 제공됩니다. 기능적으로는 함수 객체를 반복적으로 생성하는 문제를 해결하지만 의미상으로는 함수가 객체의 메서드처럼 보이지 않습니다.