Skip to content

Bug in Factory Pattern #203

@samjross

Description

@samjross

Reading this right here, the Factory Pattern section.

    // Our default vehicleClass is Car
    VehicleFactory.prototype.vehicleClass = Car;

    // Our Factory method for creating new Vehicle instances
    VehicleFactory.prototype.createVehicle = function ( options ) {

      switch(options.vehicleType){
        case "car":
          this.vehicleClass = Car;
          break;
        case "truck":
          this.vehicleClass = Truck;
          break;
        //defaults to VehicleFactory.prototype.vehicleClass (Car)
      }

      return new this.vehicleClass( options );

    };

You say that this.vehicleClass defaults to Car, but in practice, the first time you do it it default to car but every other time it defaults to whatever class you instantiated last. Try making a truck and then a car:

  // Create an instance of our factory that makes cars
  var carFactory = new VehicleFactory();

  var truck = carFactory.createVehicle( {
      vehicleType: "truck",
      color: "yellow",
      doors: 6 } );

  var car = carFactory.createVehicle( {
      color: "yellow",
      doors: 6 } );

  // Test to confirm our car was created using the vehicleClass/prototype Car

  // Outputs: false
  console.log( car instanceof Car );

  console.log( car );

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions