在JavaScript中访问子对象

时间:2016-03-30 21:12:51

标签: javascript jquery json

'我正在扩展两个JavaScript对象,其中一个是来自文件的ajaxed变量,另一个是带有用户首选项的简单对象。

// local prefs
var prefs = { name: "Bob Barker", show: "Price is Right" };

// ajax in default prefs with dataType: "script"
var defaultPrefs = { 
         studio: { name: "CBS", location: "Hollywood, CA" },
         producers: [ { name: "Producer1" }, { name: "Producer2" } ]
}

// merge prefs
var mergedPrefs = $.extend( prefs, defaultPrefs );

问题是我无法使用prefs.producers或prefs.studio访问制作人或工作室,因为他们是合并文件中的对象。我怎么能绕过这个?

2 个答案:

答案 0 :(得分:2)

试试这个:

var mergedPrefs = $.extend({}, prefs, defaultPrefs);

扩展空对象将创建原始对象的新副本。

您也可以使用Object.assign执行相同的任务,但jQuery.extend还有一个深度选项可以递归合并,而Object.assign始终是平的(为了更好)性能)。

答案 1 :(得分:2)

尝试使用此代码,但我建议ES6中的Object.assign不要使用JQuery。是一样的:

var mergedPrefs = Object.assign({}, prefs, defaultPrefs);

使用代码在没有Object.assign的情况下使用代码段(使用$.extend):



// local prefs
var prefs = {
  name: "Bob Barker",
  show: "Price is Right"
};

// ajax in default prefs with dataType: "script"
var defaultPrefs = {
  studio: {
    name: "CBS",
    location: "Hollywood, CA"
  },
  producers: [{
    name: "Producer1"
  }, {
    name: "Producer2"
  }]
}

// merge prefs
var mergedPrefs = $.extend({}, prefs, defaultPrefs);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;