博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js对象深潜拷贝(从requirejs中抠出来的)
阅读量:6089 次
发布时间:2019-06-20

本文共 1869 字,大约阅读时间需要 6 分钟。

1 var op = Object.prototype, 2     ostring = op.toString, 3     hasOwn = op.hasOwnProperty; 4  5 function isFunction(it) { 6     return ostring.call(it) === '[object Function]'; 7 }; 8  9 function isArray(it) {10     return ostring.call(it) === '[object Array]';11 };12 function hasProp(obj, prop) {13     return hasOwn.call(obj, prop);14 };15 function eachProp(obj, func) {16     var prop;17     for (prop in obj) {18         if (hasProp(obj, prop)) {19             if (func(obj[prop], prop)) {20                 break;21             }22         }23     }24 };25 /**26  * Simple function to mix in properties from source into target,27  * but only if target does not already have a property of the same name.28  *29  * @param {target} 目标对象30  * @param {source} 源对象31  * @param {force} 是否强制覆盖目标对象已有的属性32  * @param {deepStringMixin} 是否深拷贝递归操作33  *34  * @returns {target}35  */36 function mixin(target, source, force, deepStringMixin) {37     if (source) {38         eachProp(source, function (value, prop) {39             if (force || !hasProp(target, prop)) {40                 if (deepStringMixin && typeof value === 'object' && value &&41                     !isArray(value) && !isFunction(value) &&42                     !(value instanceof RegExp)) {43 44                     if (!target[prop]) {45                         target[prop] = {};46                     }47                     mixin(target[prop], value, force, deepStringMixin);48                 } else {49                     target[prop] = value;50                 }51             }52         });53     }54     return target;55 };56 57 58 调用:59 var obj = {60     name:'Tom',61     age:19,62     children:{63         name:'Jack',64         age:3065     }66 };67 var obj2 = mixin({},obj,false,true);68 obj.children.name='Marry';69 console.log(obj2);

 

转载于:https://www.cnblogs.com/gongshunkai/p/5832920.html

你可能感兴趣的文章
Git使用的常用命令
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
多线程开发
查看>>
成功搞定一个通用的Extjs增删改查模块
查看>>
暴力屏蔽80访问失败的用户
查看>>
营销型后台系统开发应该考虑到的
查看>>
vue-admin-template 切换回中文
查看>>
java模式之模板模式——抽象类
查看>>
[ACM] hdu 1251 统计难题 (字典树)
查看>>
调试json
查看>>
C - Surprising Strings
查看>>
hibernate里的generator中class =value介绍
查看>>
activity-alias的使用
查看>>
第36周日
查看>>
SQL Server 无法打开物理文件的 2 种解决办法
查看>>
推荐一款好用的文件/文件夹对比工具 —— Beyond Compare
查看>>
java设计模式--结构型模式--桥接模式
查看>>
JS window.open()属性
查看>>
手机管理中的应用【6】——电源管理篇
查看>>
【Android工具】DES终结者加密时报——AES加密演算法
查看>>