function B(type){};
B.prototype = new A(); //Ставим В в прототип объект, созданный через A, type для которого не указан
var b = new B('cool'); //Создаем объект через B, прототипом для которого станет объект, созданный выше. Указываем "cool" просто так, не для чего.
b.x // 10 - назначеное A
b.type // undefined; - т.к, вызывали new A(), а не new A('cool')
function C(type){
A.call(this, type);
//При вызове С через new создается новый объект (this),
//A назначает ему свойства x и type, но не ставит __proto__, так как не вызвана через New
};
var c = new C("cool");
c.x // 10;
c.type // cool
Ну и, собственное, истинно верный вариант:
//Или если приспичит все же поставить результат new A в прототип:
var b = Object.create(new A());