• 面向对象之继承(拷贝继承)


    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中采用的就是这种方法!

  • 相关阅读:
    python pytest全局用例共用之conftest.py详解
    mybatis mapper文件中select标签参数汇总
    mybatis整合redis实现二级缓存(转载)
    代码智能---aiXcoder插件
    mybatis运行原理及源码流程分析
    linux关闭防火墙
    mysql 锁
    mysql 性能低下的分析
    针对msyql的like中 两边都不得不使用% 的场景分析
    mysql 相关文件路径、配置
  • 原文地址:https://www.cnblogs.com/chenzhiyu/p/8819303.html
Copyright © 2020-2023  润新知