2015-07-23 2 views
1

Когда я пытаюсь расширить объект, передавая полный объект, он, кажется, перезаписывает желаемый целевой объект. Тем не менее, я могу расширить каждый подобъект отдельно, а затем передать те, в которых он работает.jQuery расширять вложенный объект

$(function() { 
    window.test = {}; 
    $.extend(window.test, { 
     init: function(opts1, opts2) { 
      //method 1, completely overwrites    
      this.options = $.extend({}, this.settings, {opts1: opts1, opts2: opts2}); 

      //method 2, works 
      this.a = $.extend({}, this.settings.opts1, opts1); 
      this.b = $.extend({}, this.settings.opts2, opts2); 
      this.options2 = $.extend({}, this.settings, {opts1: this.a, opts2: this.b}); 

      console.log(this.options, this.options2); 
     }, 
     settings: { 
      opts1: { 
       a: 'hello', 
       b: 'hi', 
       e: 'this still here?' 
      }, 
      opts2: { 
       c: 'yo', 
       d: 'wassup' 
      } 
     } 
    }); 
    test.init({ a: 'hello2', b: 'hello3' }); 
}); 

Мой вопрос, если есть способ, чтобы использовать первый метод (1 линия, простой метод), чтобы достичь результатов второго способа (индивидуальные подобъектами).

Также есть JSFiddle.

+0

@crush yup ... отметьте его как ответ. Благодаря! – Chad

ответ

2

Вы можете сделать глубокую копию, пройдя true в качестве первого параметра до $.extend. Полагаю, это то, о чем вы просите здесь.

this.options = $.extend(true, this.settings, {opts1: opts1, opts2: opts2}); 

См. Второе определение в documentation.

Смежные вопросы