zoukankan      html  css  js  c++  java
  • 函数继承

    一、通过原型实现继承

    <script>
        // 父类构造函数;
        function Proson(name, age) {
          this.name = name;
          this.age = age;
          this.eat = function() {
            console.log('我叫'+this.name+'今年'+this.age)
          }
        }
        Proson.prototype.sleep = function() {
          console.log('我的技能是睡觉')
        }
    
    	// 子类构造函数;
        function Son() {}
    
        /**
         *  只能继承实例的属性和方法不能继承原型的属性和方法;
         *  同时 constructor 指向错误不在指向原来的构造函数;
         */
        // Son.prototype =  Proson.prototype
        
        // 让son的原型指向proosn的实例(一个新的实例),通过原型达到继承;
        Son.prototype = new Proson('小红', 18)
    
        //指向改变之后要指回原构造函数;
        Son.prototype.constructor=Son;
        
        // 在改变指向后添加方法,
        Son.prototype.run = function() {
          console.log('run')
        }
    
        var fa = new Proson()
        var so = new Son()
        console.log(fa)
        console.log(so)
        console.log(so.sleep())
        console.dir(Proson)
        console.dir(Son)
      </script>
    

    优点:简单易于实现,父类实例属性和方法,子类都可以访问;

    缺点:创建子实例时,不能向父类的构造函数中传入参数;只能在改变指向的时候传入。

    二、通过构造函数实现继承;

    <script>
        function Proson(name, age) {
          this.name = name;
          this.age = age;
          this.eat = function() {
            console.log('我叫' + this.name + '今年' + this.age)
          }
        }
        
        Proson.prototype.sleep = function() {
          console.log('我的技能是睡觉')
        }
    
        function Son(name, age, score) {
          // 通过构造函数实现继承,
          // 只能继承实例的属性和方法,不能原型的方法
          Proson.call(this, name, age)
          this.score = score;
        }
    
        var fa = new Proson()
        var so = new Son('小红', 18, 90)
    
        console.log(fa)
        console.log(so)
        console.log(so.eat())
        console.dir(Proson)
        console.dir(Son)
      </script>
    

    优点:

    1、解决了子类构造函数向父类构造函数中传递参数的问题;

    2、可以实现多继承(call或apply多个多个父类)

    缺点:

    1、不能继承原型上的属性或方法,只能继承父类实例上的属性和方法;

    三、组合继承(原型+构造函数)

    <script>
        // 父类的构造函数;
        function Proson(name, age) {
          this.name = name
          this.age = age
          this.eat = function() {
            console.log('我叫' + this.name + '今年' + this.age)
          }
        }
        Proson.prototype.sleep = function() {
          console.log('我的技能是睡觉')
        }
    
        // 子类构造函数;
        function Son(name, age, score) {
          /**
           * 通过构造函数实现继承父类的全部属性;
           */
          Proson.call(this, name, age)
          this.score = score
        }
    
        /**
         * 通过原型继承父类的原型上的方法
         */
        Son.prototype = new Proson()
        Son.prototype.skill = function () {
          console.log('skill');
        }
        // 实例化对象;
        var pro = new Proson()
        var so = new Son('小明', 18)
    
        console.log(pro, so)
        console.log(so.name)
        console.log(so.skill())
    	console.log(so.eat())
      </script>
    

    优点:

    1、既可以继承父类的全部属性又可以继承父类的原型方法;

    2、可以在实例化子类时,传入参数;

  • 相关阅读:
    操作系统 第二章 进程管理
    操作系统 第一章 概述(补充)
    第六次博客作业——团队总结
    专题(十三)watch
    专题(十二)find 查找
    JVM 排查工具介绍(二)Memory Analyzer 堆内存分析工具
    Linux 学习笔记之(二)curl命令
    centos openjdk 11 安装软件包获取方式
    软件工程课程总结
    小黄衫!又一次?
  • 原文地址:https://www.cnblogs.com/ywnh/p/12343179.html
Copyright © 2011-2022 走看看