Абстрактная фабрика на Javascript

Порт кода http://alextretyakov.blogspot.ru/2012/04/shablon-abstract-factory.html на javascript:

http://jsfiddle.net/hZ3zV/4/

function WarFactory_class() {//abstractFactory
	this.name;
	this.country;
	this.createTank=function() {
	}
	this.createAircraft=function() {
	}
	this.description=function() {
		return "Factory name: "+this.name+"; Country: "+this.country+";";
	}
}
function Tank_class() {//productA
	this.name;
	this.country;
	this.speed;
	this.power;
	this.health;
	this.description=function() {
        return "Tank Name: "+this.name+"; Country: "+this.country+";";
	}
}
function Aircraft_class() {//productB
	this.name;
	this.country;
	this.pilotName;
	this.speed;
	this.power;
	this.health;
	this.altitude;
	this.description=function() {
        return "Aircraft Name: "+this.name+"; Country:"+this.country+"; Pilot:"+this.pilotName+";";
	}
}
function UssrWarFactory_class() {//concreteFactory1
	WarFactory_class.call(this);
	this.name="Kharkov Diesel Factory";
	this.country="USSR";
	this.createTank=function() {
		return new T34_class();
	}
	this.createAircraft=function() {
		return new IL2_class();
	}
}
UssrWarFactory_class.prototype = new WarFactory_class();
UssrWarFactory_class.prototype.constructor = new UssrWarFactory_class();
function T34_class() {//concreteProductA1
    Tank_class.call(this);
    this.name="T34";
    this.country="USSR";
}
T34_class.prototype = new Tank_class();
T34_class.prototype.constructor = new T34_class();
function IL2_class() {//concreteProductB1
    Aircraft_class.call(this);
    this.name="IL-2";
    this.country="USSR";
    this.pilotName="Ivan";
}
IL2_class.prototype = new Aircraft_class();
IL2_class.prototype.constructor = new IL2_class();
function GermanyWarFactory_class() {//concreteFactory2
	WarFactory_class.call(this);
	this.name="Mittelwerk";
	this.country="Germany";
	this.createTank=function() {
		return new E25_class();
	}
	this.createAircraft=function() {
		return new MesserschmittBf110_class();
	}
}
GermanyWarFactory_class.prototype = new WarFactory_class();
GermanyWarFactory_class.prototype.constructor = new GermanyWarFactory_class();
function E25_class() {//concreteProductA2
    Tank_class.call(this);
    this.name="E25";
    this.country="Germany";
}
E25_class.prototype = new Tank_class();
E25_class.prototype.constructor = new E25_class();
function MesserschmittBf110_class() {//concreteProductB2
    Aircraft_class.call(this);
    this.name="Messerschmitt Bf 110";
    this.country="Germany";
    this.pilotName="Hans";
}
MesserschmittBf110_class.prototype = new Aircraft_class();
MesserschmittBf110_class.prototype.constructor = new MesserschmittBf110_class();
var UssrWarFactory=new UssrWarFactory_class();
var GermanyWarFactory=new GermanyWarFactory_class();
console.log(UssrWarFactory.description());
console.log(GermanyWarFactory.description());
console.log(UssrWarFactory.createTank().description());
console.log(UssrWarFactory.createAircraft().description());
console.log(GermanyWarFactory.createTank().description());
console.log(GermanyWarFactory.createAircraft().description());