Здравствуйте!
Решил применять прототипное наследование. Столкнулся с не совсем очевидным для меня косяком. Сразу приведу иллюстрирующий пример кода:
// Базовый объект
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;
}
Если кто-нибудь сможет подсказать, в чем косяк и где я туплю, то буду очень признателен. Не раз выручали меня уже на этом форуме.