да но у прототипов есть огромный на мой взгляд минус, то что у родительский прототипов для всех дочерних конструкторов одни общие приватные переменные. И этот недостаток приводит к тому что на прототипной основе очень сложно делать сложное программное обеспечение. В чем все же ООП намного привлекательнее прототипных наследований.
вот небольшой пример иллюстрирующий то как приватные переменные пересекаются.
// создаем родительский объект с приватной переменной
var Parent = (function() {
var a = "test"; // наша приватная переменная
var Fn = function() {}
// публичные методы
Fn.prototype.changeTest = function() {
a = "new value";
}
Fn.prototype.show = function() {
alert( a );
}
return Fn;
})();
// дочерний конструктор, который наследует Parent
function Child() {}
function F(){}
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
var q = new Child(); // создаем один экземпляр Child
var w = new Child(); // создаем второй экземпляр Child
q.show(); // отобразим текущее приватное значение
q.changeTest(); // сменим приватную переменную
w.show(); // отобразим приватную переменную через другой экземпляр.
Результат того что для каждого экземпляра нужно пересоздавать приватные переменные. Конечно же это можно обойти в JavaScript но это уже далеко станет не прототипным наследованием.