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、可以在实例化子类时,传入参数;

  • 相关阅读:
    poj 3068 Bridge Across Islands
    XidianOJ 1086 Flappy v8
    XidianOJ 1036 分配宝藏
    XidianOJ 1090 爬树的V8
    XidianOJ 1088 AK后的V8
    XidianOJ 1062 Black King Bar
    XidianOJ 1091 看Dota视频的V8
    XidianOJ 1098 突击数论前的xry111
    XidianOJ 1019 自然数的秘密
    XidianOJ 1109 Too Naive
  • 原文地址:https://www.cnblogs.com/ywnh/p/12343179.html
Copyright © 2011-2022 走看看