如何有效地将属性从对象复制到另一个对象?

时间:2015-03-25 13:30:10

标签: javascript jquery json object

我正在寻找一种以更有效的方式编写此代码的方法。在对象加载方法中,它将具有与选项中的条目一样多的行(至少)。

var myPlugin = {
  // here are the 'plugin' default ptions
  option1: 'deafult1'
  , option2: 'deafult2'
  , option3: false
  , option4: true
  , optionN: 'deafultN'

  // here the plugin will receive an object ('options')
  load: function(options){
    if (options.option1) myPlugin.option1 = options.option1;
    if (options.option2) myPlugin.option2 = options.option2;
    //...
  }
}


myPlugin.load({
  option3: true
  , option5: '123'
});

这是将选项加载到JS / jquery插件的正确方法吗? 有没有办法使用for () / each()以更有效/更整洁的方式加载选项对象

我想的是:

  load: function(options){
    $.each(options, function(index, opt){
      // how to load options from here?
      // something like:
      // myPlugin.  ->current opt property name = opt

   });
  }

2 个答案:

答案 0 :(得分:5)

jQuery website了解$.extend

这是一种简单的方法,可以跨对象或完全复制对象。 例如,来自jQuery网站:

var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };

// Merge defaults and options, without modifying defaults
var settings = $.extend( {}, defaults, options );`

答案 1 :(得分:4)

尝试$.extend()

var opts = $.extend( {}, myPlugin.options, options );

这将从右向左复制属性,最右边的对象将获得最高优先级。

文档:http://api.jquery.com/jquery.extend/