0
外部合作伙伴为我们开发了一个jQuery插件。 我想重置一些设置,并为我的惊喜,它不工作。Jquery扩展深层拷贝问题
我做了一些调试和来到了以下结果:
我注意到,他们用$ .extend
var t = '{"config":{"filters":{"filtersPerCarousel":2,"sliders":[{"machineName":"brightness","filter":"brightness","range":100,"step":5,"value":0,"translationKey":"filter.slider.brightness"},{"machineName":"contrast","filter":"contrast","range":100,"step":5,"value":0,"translationKey":"filter.slider.contrast"}],"presets":[{"machineName":"original","filters":[],"previewImage":"/images/filters/original.png","translationKey":"filter.original"},{"machineName":"blackwhite","filters":[{"filter":"saturation","settings":[-100]}],"previewImage":"/images/filters/blackwhite.png","translationKey":"filter.blackwhite"},{"machineName":"sepia","filters":[{"filter":"greyscale","settings":[]},{"filter":"sepia","settings":[60]}],"previewImage":"/images/filters/sepia.png","translationKey":"filter.sepia"}]}}}';
var o = '{"config":{"filters":{"sliders":[],"presets":[]}}}';
settings = $.extend(true, {}, jQuery.parseJSON(t), jQuery.parseJSON(o));
console.log(settings.config);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
深当副本isset的深层副本为true我的config.sliders没有被修改并保持原始状态。
当我删除了深拷贝,只是使用的配置被修改$ .extend
var t = '{"config":{"filters":{"filtersPerCarousel":2,"sliders":[{"machineName":"brightness","filter":"brightness","range":100,"step":5,"value":0,"translationKey":"filter.slider.brightness"},{"machineName":"contrast","filter":"contrast","range":100,"step":5,"value":0,"translationKey":"filter.slider.contrast"}],"presets":[{"machineName":"original","filters":[],"previewImage":"/images/filters/original.png","translationKey":"filter.original"},{"machineName":"blackwhite","filters":[{"filter":"saturation","settings":[-100]}],"previewImage":"/images/filters/blackwhite.png","translationKey":"filter.blackwhite"},{"machineName":"sepia","filters":[{"filter":"greyscale","settings":[]},{"filter":"sepia","settings":[60]}],"previewImage":"/images/filters/sepia.png","translationKey":"filter.sepia"}]}}}';
var o = '{"config":{"filters":{"sliders":[],"presets":[]}}}';
settings = $.extend({}, jQuery.parseJSON(t), jQuery.parseJSON(o));
console.log(settings);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
为什么我的对象修改与深拷贝未设置为什么不是用深拷贝修改? 这是更有意义的,这是另一种方式?
jquery的版本是1.9.1,但我测试了这个多版本,他们都给出了相同的结果。
你必须设置深复制到TRUE;深拷贝;那是每个设计。你在这里担心什么?什么不起作用? – Developer