Edit in JSFiddle

function Vehicle() {
    var registration = Math.random();
    var prop = {
        get: function() {
            return registration
        }
    }
    Object.defineProperty(this, "registration", prop)
}

//land vehicle travel on land, hence it has tires
function LandVehicle(numberOfTires, make) {
    Vehicle.call(this);
    if (!numberOfTires || isNaN(numberOfTires)) {
        return;
    }

    var tires = [];
    for (var i = 1; i <= numberOfTires; i++) {
        var tire = new Tire(Math.random());
        tires.push(tire);
    }

    var prop = {
        get: function() {
            return tires
        }
    }
    Object.defineProperty(this, "tires", prop)

    var prop = {
        get: function() {
            return make
        }
    }
    Object.defineProperty(this, "make", prop)

    //Tire factory
    function Tire(pressure) {
        var prop = {
            get: function() {
                return pressure
            }
        }
        Object.defineProperty(this, "pressure", prop)
    }
}

function MotorBike() {
    var make = MotorBike.randomMake();
    LandVehicle.call(this, 2, make);
    this.topSpeed = 250;
}
//static functions
Object.defineProperty(MotorBike, "makes", {
    get: function() {
        return ["Honda", "Kawasaki", "Suzuki", "Yamaha"]
    }
});
Object.defineProperty(MotorBike, "randomMake", {
    value: getRandomMake
})

function getRandomMake() {
    var rand = Math.round(this.makes.length * Math.random()) % this.makes.length;
    return this.makes[rand];
}

function Car() {
    //random make
    var make = Car.randomMake();
    LandVehicle.call(this, 4, make);
}

//static functions
Object.defineProperty(Car, "makes", {
    get: function() {
        return ["ferrari", "audi", "bmw", "honda", "ford"]
    }
})
Object.defineProperty(Car, "randomMake", {
    value: getRandomMake
})

function SportsCar() {
    Car.call(this)
    this.topSpeed = 300;
}

function RacingCar() {
    SportsCar.call(this);
    this.topSpeed = 415;
}

LandVehicle.prototype = new Vehicle();
Car.prototype = new LandVehicle();
MotorBike.prototype = new LandVehicle();
SportsCar.prototype = new Car();
RacingCar.prototype = new SportsCar();

//now we are free to set other prototypes . 
Object.defineProperty(MotorBike.prototype, "ride", {
    value: function() {
        console.log("Vroom Vrooooom Vrooom VROOOOM");
    }
});

Object.defineProperty(Vehicle.prototype, "topSpeed", {
    value: 20,
    writable: true
});
Object.defineProperty(Car.prototype, "horn", {
    value: function() {
        console.log("Honk!")
    }
});
Object.defineProperty(Car.prototype, "drive", {
    value: function() {
        console.log("Vroom!")
    }
});
Object.defineProperty(SportsCar.prototype, "overtake", {
    value: function() {
        console.log("overtaking!")
    }
});
Object.defineProperty(RacingCar.prototype, "race", {
    value: function() {
        console.log("racing!")
    }
});

//formula1 cars
var f1 = new RacingCar();
var f2 = new RacingCar();

//sports cars
var sports1 = new SportsCar();
var sports2 = new SportsCar();

//car
var car1 = new Car();
var car2 = new Car();

//Motorbikes
var bike1 = new MotorBike();
var bike2 = new MotorBike();