zoukankan      html  css  js  c++  java
  • 面向对象之继承(拷贝继承)

    js中的继承,个人觉得一直是js的软肋,当然自从es6中新增了extend,得到了很大的改观,我们今天不对extend做介绍,主要介绍一下js中最早实现继承的一些方法

    function Person(name,age){
        this.name = name;
        this.age = age;  
    }
    
    Person.prototype.showName = function(){
         console.log(this.name);  
    }
    
    var p = new Person('张三',20);
    p.showName();       //'张三';

    上面是个简单的面向对象程序,我们来再写一个ExtendPerson对象来继承Person对象;

    function ExtendPerson(name,age,job){
        Person.call(this,name,age);   //调用父类的构造函数,默认情况下this指向window,所以要改变this指向,使其指向当前的对象 
        this.job = job;   
    }

    以上代码实现了属性的继承,那么怎么继承父类的方法呢

    ExtendPerson.prototype = Person.prototype;

    我们把父类的原型,赋值给子类的原型,虽然这样确实可以将父类的方法继承过来,但是因为赋值就出现了对象的引用,也就意味着给子类添加方法父类也就拥有了添加的方法,这显然不是我们想要的结果,那么怎么办呢,可以这样

    function extend(obj1,obj2){
       for(var attr in obj1){
            obj2[attr] = obj1[attr];
       }
    }

    我们封装一个方法,并调用

    extend(Person.prototype,ExtendPerson.prototype);

    这样我们就实现了方法的继承,这种方法我们称之为拷贝继承!jQuery中采用的就是这种方法!

  • 相关阅读:
    斜率优化dp学习
    拓扑排序
    P2486 [SDOI2011]染色 区间合并+树链剖分(加深对线段树的理解)
    网络流24题!!!!
    费用流板子
    网络流dinic板子
    小花梨的数组
    C. 小花梨判连通
    splay树
    hdu4467 graph
  • 原文地址:https://www.cnblogs.com/chenzhiyu/p/8819303.html
Copyright © 2011-2022 走看看