zoukankan      html  css  js  c++  java
  • 面向对象三大特征之继承

    面向对象的三大特征包含:封装、继承、多态。现简单介绍一下——继承

    继承有以下几种方式:

    1、实例继承  (也称:冒充继承,经典继承)(实例属性 和 实例方法)

    通过call和apply,来继承,具体语法如下

    fn.call(对象,参数一,参数二,……)
    fn.apply(对象,[])
    fn.apply(对象,arguments)

    其中,arguments为伪数组,可以接收后面的所有参数

    具体案例如下:

    
    
    <script type="text/javascript">

    function Superman(name,age){
        //Person.call(this,name,age); 
        // Person.apply(this,[name,age]);
        Person.apply(this,arguments);
    }
           
    var sm = new Superman('小王',12);
    alert(sm.showName());    //小王
    </script>

    2、原型继承

    通过prototype原型继承(原型属性 和 原型方法)

    <script type="text/javascript">
            //原型
            function Person(){}
            
            //原型属性
            Person.prototype.name = '小王';
            Person.prototype.age = 20;
            //原型方法
            Person.prototype.showName = function(){
                return this.name;
            }
            Person.prototype.showAge = function(){
                return this.age;
            }
            
            //超人的构造函数
            function Superman(){}
            
            //Superman.prototype = Person.prototype;
            //Superman.prototype = new Person();
            for(let key in Person.prototype){
                Superman.prototype[key] = Person.prototype[key];
            }
            Superman.prototype.name = "人才";
            
            var sm = new Superman();
            alert(sm.showName());
            
            var ps = new Person();
            alert(ps.showName());
        </script>

     3、混合继承

    实例属性通过call 或 apply实现继承,实例方法通过prototype原型继承,具体案例如下:

    <script type="text/javascript">
            //原型
            function Person(name,age){
                //实例属性
                this.name = name;
                this.age = age;
            }
            
            //原型属性)(这里注释掉,是因为这里要做混合继承,要用实例属性)
    //         Person.prototype.name = '小王';
    //         Person.prototype.age = 22;
            //原型方法
            Person.prototype.showName = function(){
                return this.name;
            }
            Person.prototype.showAge = function(){
                return this.age;
            }
            
            function Superman(name,age){
                Person.apply(this,arguments);
            }
         //遍历Person中的所有原型方法prototype,然后赋值给Superman的原型prototype
    for(let key in Person.prototype){ Superman.prototype[key] = Person.prototype[key]; } let sm = new Superman('小皮',20); alert(sm.showName()); </script>

    4、对象冒充

    通过类似的方法实现继承:this.student = Person; (student为子类,Person为父类)
    function Person(name,age){
    this.name = name;
    this.age = age;
    this.show = function(){
    console.log(this.name+", "+this.age);
    }
    }
    
    function Student(name,age){
    this.student = Person; 
    this.student(name,age);
    //可以删除对象中指定的实例属性
    //delete student.name
    //删除对person的引用
    //delete this.student; 
    }
    
    var s = new Student("小王",22);
    s.show();
    // 小王, 22
    var p = new Person("小皮",20);
    p.show();
    // 小皮, 20

    等。。。

  • 相关阅读:
    软件需求阅读笔记02
    软件需求阅读笔记01
    搜狗输入法
    冲刺周之后感想
    典型用户分析和场景
    四则运算
    学习总结
    2019年春阅读笔记5——对开源的认知
    2019年春阅读笔记4——分布式消息系统的现状、挑战与未来
    2019年春阅读笔记3——数据库集群方案
  • 原文地址:https://www.cnblogs.com/-roc/p/9945557.html
Copyright © 2011-2022 走看看