JS面向对象组件(五) -- 复制对象(拷贝继承)
研究到这儿,竟然出现了一个面试题目
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
所以总结一下,就是如下:
属性的继承 | 方法的继承 |
调用父类的构造函数call | for in 拷贝继承(jquery中就是如此) |