Показать сообщение отдельно
  #1 (permalink)  
Старый 05.10.2012, 10:39
Аспирант
Отправить личное сообщение для bFree Посмотреть профиль Найти все сообщения от bFree
 
Регистрация: 19.08.2008
Сообщений: 42

Объекты, прототипы и циклы
Здравствуйте!
Решил применять прототипное наследование. Столкнулся с не совсем очевидным для меня косяком. Сразу приведу иллюстрирующий пример кода:

// Базовый объект
function Foo(options) {
    this.setOptions(options);
}

Foo.prototype.defaultOptions = {
    some_option: null
};

Foo.prototype.setOptions = function(options) {
    this.options = jQuery.extend(true, this.defaultOptions, options);
};


// Наследник
function Bar(options) {
    this.setOptions(options);
}
extend(Bar, Foo);

// Добавим какие-то свои опции
Bar.prototype.defaultOptions = {
    some_option   : null,
    another_option: false
};


// Создадим несолько объектов
for(var i = 0; i < 4; i++) {
    var obj = new Bar({
        some_option: i,
        another_option: true
    });

    console.log(obj.options); // откроем каждую строку в Firebug'е и везде some_option будет равно 3 =(
}


В примере я использовал функцию extend из уроков с javascript.ru. Вот она:
function extend(Child, Parent) {
    var F = function() {};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.prototype.constructor = Child;
    Child.superclass = Parent.prototype;
}


Если кто-нибудь сможет подсказать, в чем косяк и где я туплю, то буду очень признателен. Не раз выручали меня уже на этом форуме.
Ответить с цитированием