Показать сообщение отдельно
  #6 (permalink)  
Старый 02.04.2012, 01:57
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

да но у прототипов есть огромный на мой взгляд минус, то что у родительский прототипов для всех дочерних конструкторов одни общие приватные переменные. И этот недостаток приводит к тому что на прототипной основе очень сложно делать сложное программное обеспечение. В чем все же ООП намного привлекательнее прототипных наследований.

вот небольшой пример иллюстрирующий то как приватные переменные пересекаются.
// создаем родительский объект с приватной переменной
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 но это уже далеко станет не прототипным наследованием.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 02.04.2012 в 02:09.
Ответить с цитированием