zoukankan      html  css  js  c++  java
  • 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中就是如此)



  • 相关阅读:
    轮播制作
    前端问题总结
    响应式 媒体查询 盒模型
    响应式 字体设置 flex 弹性布局
    C++ STL之set常用指令
    SRM468
    SRM470
    置换及其应用专题
    C++ STL之map常用指令
    C++ STL之pair常用指令
  • 原文地址:https://www.cnblogs.com/wanliyuan/p/5245170.html
Copyright © 2011-2022 走看看