摘要:冴羽的博客学习 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检测复杂类型