Let's say I'm shooting for some basic inheritance in my application, I could achieve this by setting the prototype of my child to the parent.
// Parent "class"
var Car = function(year) {
    this.year = year;
};
Car.prototype.drive = function() {
    console.log('Vrooom');
};
// Child "class"
var Toyota = function() {
    Car.apply(this, arguments);
};
Toyota.prototype = Car.prototype;
var myCar = new Car(2010), myToyota = new Toyota(2010);
myCar.drive(); // Vrooom
myToyota.drive(); // Vrooom
Seems to work, but is obviously bad because if I set a new method on my Toyota.prototype, it will be set on Car's prototype.
Toyota.prototype.stop = function() {
    console.log('stooop');
};
myCar.stop(); // stooop  <--- bad
myToyota.stop(); // stooop  <--- good
To solve this, instead of Toyota.prototype = Car.prototype; I can add an intermediary:
var ctor = function() { };
ctor.prototype = Car.prototype;
Toyota.prototype = new ctor();
Toyota.prototype.stop = function() {
    console.log('stooop');
};
myCar.stop(); // throws undefined error  <--- good
myToyota.stop(); // stooop  <--- good
But I don't understand why this works.  ctor creates a new instance with its prototype set to Car's prototype, and then Toyota sets its prototype to that new instance.  
But why create an empty object with a prototype that gets referenced by Toyota's prototype?
Why doesn't setting a new method on Toyota set it on Car like it does in the first example?
What if I want several layers of inheritance, it seems like I need to glue them together with a new ctor every time?
 
     
    