在JavaScript中访问子对象

在JavaScript中访问子对象,javascript,jquery,json,Javascript,Jquery,Json,我正在扩展两个JavaScript对象,其中一个是从文件中传入的变量,另一个是具有用户首选项的简单对象 // local prefs var prefs = { name: "Bob Barker", show: "Price is Right" }; // ajax in default prefs with dataType: "script" var defaultPrefs = { studio: { name: "CBS", location: "Hollywoo

我正在扩展两个JavaScript对象,其中一个是从文件中传入的变量,另一个是具有用户首选项的简单对象

// 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访问producers或studio,因为它们是合并文件中的对象。我怎样才能避开这个问题?

试试这个:

var mergedPrefs = $.extend({}, prefs, defaultPrefs);
扩展空对象将创建原始对象的新副本

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

尝试以下操作:

var mergedPrefs = $.extend({}, prefs, defaultPrefs);
扩展空对象将创建原始对象的新副本


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

尝试一下这段代码,但我建议在ES6中不要使用jQuery。是一样的:

var mergedPrefs = Object.assign({}, prefs, defaultPrefs);
代码在没有Object.assign的情况下工作的代码段(使用
$.extend
):

//本地prefs
变量prefs={
姓名:“鲍勃·巴克”,
节目:“价格合适”
};
//数据类型为“script”的默认prefs中的ajax
var defaultPrefs={
演播室:{
名称:“哥伦比亚广播公司”,
地点:“加利福尼亚州好莱坞”
},
制作人:[{
名称:“生产商1”
}, {
名称:“生产商2”
}]
}
//合并优先权
var mergedPrefs=$.extend({},prefs,defaultPrefs)

试试这段代码,但我建议在ES6中不要使用JQuery。是一样的:

var mergedPrefs = Object.assign({}, prefs, defaultPrefs);
代码在没有Object.assign的情况下工作的代码段(使用
$.extend
):

//本地prefs
变量prefs={
姓名:“鲍勃·巴克”,
节目:“价格合适”
};
//数据类型为“script”的默认prefs中的ajax
var defaultPrefs={
演播室:{
名称:“哥伦比亚广播公司”,
地点:“加利福尼亚州好莱坞”
},
制作人:[{
名称:“生产商1”
}, {
名称:“生产商2”
}]
}
//合并优先权
var mergedPrefs=$.extend({},prefs,defaultPrefs)

您是说您想使用
prefs.producers
访问它们,还是不想使用
prefs.producers
访问它们?您是说您想使用
prefs.producers
访问它们,还是不想使用
prefs.producers
访问它们答案似乎是您想要的,但也要注意,您不需要为此使用jQuery。您还可以使用ES6
Object.assign
函数,该函数在功能上等同于
$.extend
。取自文档:但是,如果您想保留两个原始对象,可以通过传递一个空对象作为目标:var Object=$.extend({},object1,object2)@MoreScratch这个答案似乎可以满足您的需要,但也要注意,您不需要为此使用jQuery。您还可以使用ES6
Object.assign
函数,该函数在功能上等同于
$.extend
。取自文档:但是,如果您想保留两个原始对象,可以通过传递一个空对象作为目标:var Object=$.extend({},object1,object2);作为ECMA脚本第6版,您可以为不支持ES6的浏览器提供一个polypill。请参阅ECMA脚本第6版,您可以为不支持ES6的浏览器提供一个polypill。看见