白衬杉格子梦 2022-05-04 13:48:20
function extend() { // 默认不进行深拷贝 var deep = false; var name, options, src, copy; var length = arguments.length; // 记录要复制的对象的下标 var i = 1; // 第一个参数不传布尔值的情况下,target默认是第一个参数 var target = arguments[0] || {}; // 如果第一个参数是布尔值,第二个参数才是target if (typeof target == 'boolean') { deep = target; target = arguments[i] || {}; i++; } // 如果target不是对象,我们无法进行复制的所以设为{} if (typeof target !== 'object') { target = {} } for (; i < length; i++) { // 从i 开始 没有deep i = 1 有deep i = 2 options = arguments[i] if (options !== null) { //不为null和undefined for (name in options) { src = target[name] copy = options[name] if (deep && copy && typeof copy == 'object') { console.log(deep, src, copy) src = extend(deep, src, copy) // target[name] = extend(deep,src,copy) } else if (copy !== undefined) { target[name] = copy } } } } return target } var obj1 = { a: 1, b: { c: 2 } } var obj2 = { b: { c: [5], } } var d = extend(true, obj1, obj2) console.log(d); // {a:1,b:{c:2}}
只是在深拷贝的时候把 target[name]换成了 src
怎么会这样?
- 共 1 页
- 1
很关键的一点 很核心
第 7 题:ES5/ES6 的继承除了写法以外还有什么区别?