'我正在扩展两个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访问制作人或工作室,因为他们是合并文件中的对象。我怎么能绕过这个?
答案 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;