频道栏目
首页 > 资讯 > HTML/CSS > 正文

对象引用

17-05-25        来源:[db:作者]  
收藏   我要投稿

实例一:

var a = 5;
var b = a;

b += 3;
alert(b);//8
alert(a);//5

/**
 * 建立一个变量 a,一个变量b,把 a 的值赋值给 b
 * b 的值改变不会影响 a 的值,这就是一个简单的赋值关系
 * 这种赋值关系主要存在于 基本类型中(比如说:String,Number,Boolean,Undefined,null)
 */

实例二:

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];
var b = a;

//b这个时候在内存中重新占据了一块地址,这个时候它和 a 分离了
//这个时候你再修改b,就不会影响到 a 了
b = [1,2,3,4];

alert(b);//1,2,3,4
alert(a);//1,2,3

实例四:

var obj1 = {
    a : 10
}

var obj2 = obj1;

obj2.a = 20;

alert(obj1.a);//20
/**
 * 可以看到此时修改 obj2 的属性 影响了 obj1
 * 我们复制一个对象给另一个对象,那当你改另一个对象的时候
 * 会影响到之前的对象,这肯定是我们不希望看到的
 * 
 * 那我们要克隆或者是拷贝一个对象要怎么做呢?看下一个实例
 */

实例五(浅拷贝):

var obj1 = {
    a : 10
}

function copy(obj){//浅拷贝

    var newObj = {};

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

    return newObj;
}

var obj2 = copy(obj1);

obj2.a = 20;

alert(obj1.a);//10

实例六(深拷贝):

var obj1 = {
    a : {b : 10}
}

function deepCopy(obj){//深拷贝,我们使用递归的方法来实现

    //终止条件,即什么时候 obj 不是对象就可以返回了
    if(typeof obj != 'object'){
        return obj;
    }
    var newObj = {};

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

    return newObj;
}

var obj2 = deepCopy(obj1);

obj2.a.b = 20;

alert(obj1.a.b);//10
相关TAG标签
上一篇:css3flex布局,文字超出显示省略号
下一篇:js跨域利用jsonp的原理
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站