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


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

  • 相关阅读:
    在线服务之性能测试工具科普
    在线服务之socket编程科普
    Hadoop发展历史简介
    TCP/IP协议知识科普
    操作系统之内存管理科普
    操作系统之进程管理科普
    开源PaaS产品介绍
    并行计算知识科普
    IaaS层市场科普
    WCF服务开发与调用的完整示例
  • 原文地址:https://www.cnblogs.com/chenzhiyu/p/8819303.html
Copyright © 2020-2023  润新知