最初我怀疑$ .extend是如何工作的。我提到了这个问题,但是我对以下代码段感到困惑
$.extend(true,{},{foo:2})
$.extend({},{foo:2})
都回来了{foo:2}
。
我对第二条代码声明非常清楚。第一句话如何工作?第一句话和第二句话之间有什么区别?如果两者相同,那么第一个陈述的目的是什么?如果不是,为什么两个都返回相同的结果?
有什么建议?
它创建了一个深层副本,我认为一个例子可以向您展示它的作用
var log = (function() {
var $log = $('#log');
return function(msg) {
$('<p/>', {
text: msg
}).appendTo($log)
}
})();
function test(deep) {
var obj = {
prop1: 1,
obj12: {
prop1: 1
}
};
var cpy = deep ? $.extend(true, {}, obj) : $.extend({}, obj);
cpy.obj12.prop1 = 'changed';
log(JSON.stringify(obj));
log(JSON.stringify(cpy));
}
log('without the deep param')
test();
log('with deep')
test(true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="log"></div>
如果你看一下生成的结果obj12
值实际复制到cpy
时deep
没有使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句