摘要:冴羽的博客学习extend
作用
extend的作用就是将其他对象的内容复制到目标对象上,当出现相同属性时,后者会覆盖前者
实现浅复制
1  | function _extend() {  | 
实现深复制
实现深复制需要一个参数控制是否进行深复制,且如果属性值是引用类型就需要进行递归
1  | function _extend() {  | 
其他细节
1.target可以是函数,毕竟函数也是对象
1  | if (typeof target !== "object" && !isFunction(target)) {  | 
2.属性进行覆盖时,如果目标类型不是object就被设为{},此时会发生一些错误。因而要判断目标对象和待复制对象两者属性值类型是否一致,而且是目标对象属性值的类型要与待复制对象属性值类型保持一致
1  | var valueIsArray, typeTarget;  | 
3.可能会遇到循环引用,但是要避免这种情况。当待复制对象的属性值与目标对象target相同时需要跳出
1  | src = target[key];  | 
最终代码
1  | function _extend() {  | 
isFunction见JavaScript检测类型
isPlainObject见JavaScript检测复杂类型