jQuery новый экземпляр объекта

0

У меня есть небольшая проблема с созданием новых экземпляров объекта.

(function ($) {
$.Graph = function (config) {
    jQuery.extend(true, self.options, config || {});

    // do something

    return this;

}

$.Graph.prototype = {
    data: [],
    options: {...}
}
}(jQuery));

Проблема в том, что я создаю два экземпляра этого объекта:

Graph1 = new $.Graph({'container': 'graph1',...});
Graph2 = new $.Graph({'container': 'graph2',...});

и после

console.log(Graph1.options.container);
console.log(Graph2.options.container);

У меня есть для обоих результат result 'graph2'. Я думаю, что первый экземпляр был перезаписан вторым. Как я могу это сделать. Возможно, это возможно с помощью jQuery "plugin", но я не предпочитаю его для этого объекта Object/Class.

Может кто-нибудь мне помочь?

благодаря

  • 0
    попробуйте jsfiddle.net/arunpjohny/FxnQ2/3
  • 0
    Что такое self.options ?
Показать ещё 1 комментарий
Теги:
class
object
oop

1 ответ

0

Проблема в том, что в прототипной иерархии есть объект- option ваш код каждый раз изменяет общий объект, вместо того, чтобы создавать новый объект опций для каждого экземпляра Graph.

Одним из возможных решений является наличие другого объекта параметров по умолчанию, например

(function ($) {
    $.Graph = function (config) {
        this.options = jQuery.extend(true, {}, $.Graph.defaultOptions, config || {});
        return this;
    }

    $.Graph.prototype = {
        data: []
    }
    $.Graph.defaultOptions = {
        container: '',
        some: 'other'
    }
}(jQuery));


Graph1 = new $.Graph({
    'container': 'graph1'
});
Graph2 = new $.Graph({
    'container': 'graph2'
});


console.log(Graph1, Graph1.options.container);
console.log(Graph2, Graph2.options.container);

Демо: скрипка

  • 0
    спасибо, у меня это работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню