<script>
    //递归
    function test(n) {
        if (n == 1) {
            return 1
        }
        console.log(n)
        return n * test(n - 1)
    }
    console.log(test(3))
    </script>
var obj={
            obj1:{
                obj2:{
                    obj3:{
                        obj4:{
                            name:'liujin'
                        }
                    }
                }
            }
        }

        function fn(o){
            if(typeof o != 'object'){
                return o;
            }
            for(var attr in o){
                console.log(attr)
            }
            return fn(o[attr])
        }
        fn(obj)

结果:

obj1
 obj2
 obj3
 obj4
 name

var obj={
obj1:{
obj2:{
obj3:{
obj4:{
name:'liujin'
}
}
}
}
}

function fn(o){
if(typeof o != 'object'){
return o;
}
for(var attr in o){
console.log(o[attr])
}
return fn(o[attr])
}
fn(obj)

结果:

Object {obj2: Object}
Object {obj3: Object}
Object {obj4: Object}
Object {name: "liujin"}
liujin

对象的引用

var a={
  m:  10
}

var b=a;

b.m=20;

alert(b.m)
alert(a.m)  

对象的拷贝

<script>
var obj = {
    a : { b : 10 }
};

/*function copy(obj){  //浅拷贝

    var newObj = {};

    for(var attr in obj){
        newObj[attr] = obj[attr];
    }

    return newObj;

}*/

function deepCopy(obj){  //深拷贝

    if(typeof obj != 'object'){
        console.trace();
        return obj;
    }

    var newObj = {};

    for(var attr in obj){
        newObj[attr] = deepCopy(obj[attr]);
    }

    return newObj;

}

var obj2 = deepCopy(obj);

obj2.a.b = 20;

alert(obj.a.b);
</script>

var deepCopy= function(source) {

var result={};

for (var key in source) {

result[key] = typeof source[key]===’object’? deepCoyp(source[key]): source[key];

}
return result;
}

递归 与 js 对象的引用的更多相关文章

  1. 用浅/深拷贝、和HTML5方法解决js对象的引用的问题

    先来看一个例子 例一: var a=[1,2,3]; var b=a; b.push(4); alert(b);//1,2,3,4 alert(a);//1,2,3,4 var a=[1,2,3]; ...

  2. JS对象的引用,对象的拷贝

    目录 一.场景 二.浅拷贝 三.深拷贝 一.场景 除了基本类型跟null,对象之间的赋值,只是将地址指向同一个,而不是真正意义上的拷贝 将一个对象赋值给另外一个对象. var a = [1,2,3]; ...

  3. js对象的引用

    /*var a = [1,2,3]; var b = [1,2,3]; alert( a == b ); //false*/ //基本类型:赋值的时候只是值得复制 /* var a = 5; var ...

  4. javascript基础-js对象

    一.js对象的创建 1.普通最简单的方式 var teacher = new Object( ); teacher.name = "zhangsan"; teacher.age = ...

  5. js 操作对象的引用和操作实际对象的区分

    JavaScript高级程序设计-第3版-中 有这么一段话: 在操作对象时,实际上是在操作对象的引用而不是实际的对象.为此,引用类型的值是按引用访问的①. ① 这种说法不严密,当复制保存着对象的某个变 ...

  6. js 对象深复制,创建对象和继承

    js 对象深复制,创建对象和继承.主要参考高级编程第三版,总结网上部分资料和自己的代码测试心得.每走一小步,就做一个小结. 1.对象/数组深复制 一般的=号传递的都是对象/数组的引用,如在控制台输入 ...

  7. 超实用的JavaScript代码段 Item8 -- js对象的(深)拷贝

    js 对象 浅拷贝 和 深拷贝 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷贝: var Chinese = { nation:'中国' } var Doctor ...

  8. JS 对象的深拷贝和浅拷贝

    转载于原文:https://www.cnblogs.com/dabingqi/p/8502932.html 这篇文章是转载于上面的链接地址,觉得写的非常好,所以收藏了,感谢原创作者的分享. 浅拷贝和深 ...

  9. js对象进行浅复制,深拷贝的方法

    js对象浅拷贝和深拷贝详解   本文为大家分享了JavaScript对象的浅拷贝和深拷贝代码,供大家参考,具体内容如下 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷 ...

随机推荐

  1. A*寻路算法的探寻与改良(一)

    A*寻路算法的探寻与改良(一) by:田宇轩                                                                    第一部分:这里我们主 ...

  2. C# 字符串常用操作 分类: C# 2014-08-22 15:07 238人阅读 评论(0) 收藏

    string str1 = "C#操作字符串<几种常见方式>如下"; string str2 = "C#操作字符串";     //比较字符串 Co ...

  3. android_小总结_方法过时的兼容处理

    随着android系统的升级,有些过时的方法已经不再使用,但是又要兼容老的版本,所以这个时候可以使用反射来处理下 举个列子pull_to_refresh 中有个方法找不到==initializeScr ...

  4. 移动开发框架,第【一】弹:QuoJs 官方文档(汉化版)

    作者:一只猿 原文地址: http://www.92ez.com 转载请注明出处,谢谢 帮助说明 如果您认为QuoJS只是一个触摸事件管理器,那你就错了,它是一个功能丰富的类库,无需第三方JavaSc ...

  5. 阿里云 centos 部署javaweb 应用

    今天在阿里云上部署了个javaweb应用,在此记录下步骤,以供下次使用. 服务器版本: 1.root登陆服务器 2.服务器安装FTP服务,或者直接使用winscp上传文件(简单),本文介绍安装FTP服 ...

  6. TreeView设置节点图标

    TreeView设置节点图标 没子节点的设置其图标为 0 有节点的设置其图标为 1 procedure TForm1.Button1Click(Sender: TObject);var   i:Int ...

  7. ★ Linked List Cycle II -- LeetCode

    证明单链表有环路: 本文所用的算法 能够 形象的比喻就是在操场其中跑步.速度快的会把速度慢的扣圈  能够证明,p2追赶上p1的时候.p1一定还没有走完一遍环路,p2也不会跨越p1多圈才追上  我们能够 ...

  8. 在一台电脑访问另一台电脑的mysql数据库

    1.      假设192.168.1.3为服务器 2.      首先在ip为192.168.1.103的机子上能够ping 通 运行->cmd >ping  192.168.1.3 检 ...

  9. VS2012减负:加快启动速度,减少编辑卡壳

    我公司的笔记本配置如下: CPU:i5-3210M @ 2.50 GHz 2.50 GHz mem: 4.00 GB OS: 64bit Win7 用VS2012编译Cocos2d-X项目时非常的卡. ...

  10. Android绘制流程

    一.前言 1.1.C++界面库 MFC.WTL.DuiLib.QT.Skia.OpenGL.Android里面的画图分为2D和3D两种: 2D是由Skia 来实现的,3D部分是由OpenGL实现的. ...