JS面向对象组件(五) -- 复制对象(拷贝继承)

本文探讨了JavaScript中对象引用的变化及其对继承的影响,通过具体的示例解释了对象与数组在不同操作下的行为差异,并提供了几种实现继承的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

研究到这儿,竟然出现了一个面试题目

var a = {
    name : '小明'
};

var b = a;

b.name = '小强';

alert( a.name );      

结果必然是“小强”,原因是对象的引用,两个用的是一个地址,所以只要这个地址里的东西变了,那个两个对象弹出来的自然也要变。

 

故而这儿存在的是上篇同样的问题。

var a = {
    name : '小明'
};
var b = {};
extend( b , a );
b.name = '小强';
alert( a.name );
function extend(obj1,obj2){
    for(var attr in obj2){
        obj1[attr] = obj2[attr];
    }
}

 

因此上篇的解决方案就是将 extend的方法加上,并且将

createStar.prototype = createPerson.prototype;   改成 extend(createStar.prototype,createPerson.prototype);


还有一个面试题目:
var a = [1,2,3];
var b = a;
b.push(4);
alert(a);      // 1,2,3,4


var a = [1,2,3];
var b = a;
b = [1,2,3,4];
alert(a);     // 1,2,3

 

上面这个弹出结果,考察的是对象引用时的问题,对象引用改变了。

下面的弹出结果是,当b重新赋值时,对象应用问题就已经解开了,因为重新赋值时,b就又开了个新的地址,所以a还是1,2,3

 

所以总结一下,就是如下:
属性的继承方法的继承
调用父类的构造函数callfor in  拷贝继承(jquery中就是如此)



转载于:https://www.cnblogs.com/wanliyuan/p/5245170.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值