js对象深潜拷贝(从requirejs中抠出来的)

Posted codeing or artist ?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js对象深潜拷贝(从requirejs中抠出来的)相关的知识,希望对你有一定的参考价值。

 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:30
65     }
66 };
67 var obj2 = mixin({},obj,false,true);
68 obj.children.name=‘Marry‘;
69 console.log(obj2);

 

以上是关于js对象深潜拷贝(从requirejs中抠出来的)的主要内容,如果未能解决你的问题,请参考以下文章

addClass, removeClass, toggleClass(从jquery中抠出来)

将dumpbin从VS中抠出来,并使用dumpbin查看exe和dll库的依赖关系

从真实项目中抠出来的设计模式——第三篇:责任链模式

获取元素在浏览器中的绝对位置(从jquery1.8中抠出来)

从真实项目中抠出来的设计模式——第二篇:过滤器模式

深入 js 深拷贝对象