Fork me on GitHub

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中就是如此)



posted on 2016-03-05 16:59  雨为我停  阅读(417)  评论(0编辑  收藏  举报