美文网首页
69-继承方式三

69-继承方式三

作者: 仰望_IT | 来源:发表于2019-04-27 10:29 被阅读0次
  • 将Student构造函数的原型对象改为Person构造函数的原型对象
    • 注意点: 要想使用Person原型对象中的属性和方法, 那么就必须将Student的原型对象改为Person的原型对象才可以

          function Person(myName, myAge) {
              // let per = new Object();
              // let this = per;
              // this = stu;
              this.name = myName; // stu.name = myName;
              this.age = myAge;   // stu.age = myAge;
      
              // this.say = function () {    // stu.say = function () {}
              //     console.log(this.name, this.age);
              // }
              // return this;
          }
      
          // 如果将say方法放到Person原型对象中, 那么用继承方式二将不能访问say, 这就是继承方式二的弊端
          Person.prototype.say = function () {
              console.log(this.name, this.age);
          }
      
          function Student(myName, myAge, myScore) {
              // let stu = new Object();
              // let this = stu;
              Person.call(this, myName, myAge); // Person.call(stu);
              this.score = myScore;
              this.study = function () {
                  console.log("day day up");
              }
              // return this;
          }
      
          // 解决继承方式二的弊端, 也就是继承方式三
          // 将Student构造函数的原型对象改为Person构造函数的原型对象
          // 注意点: 要想使用Person原型对象中的属性和方法, 那么就必须将Student的原型对象改为Person的原型对象才可以
          Student.prototype = Person.prototype;
          Student.prototype.constructor = Student;
      
          let stu = new Student("ww", 19, 99);
          console.log(stu.score);
          stu.say();
          stu.study();
      



  • 继承方式三的弊端
    • 由于修改了Person原型对象的constructor属性, 所以破坏了Person的三角恋关系

    • 由于PersonStudent的原型对象是同一个, 所以给Student的元素添加方法的时候, Person也会新增方法

         function Person(myName, myAge) {
              // let per = new Object();
              // let this = per;
              // this = stu;
              this.name = myName; // stu.name = myName;
              this.age = myAge;   // stu.age = myAge;
      
              // this.say = function () {    // stu.say = function () {}
              //     console.log(this.name, this.age);
              // }
              // return this;
          }
      
          Person.prototype.say = function () {
              console.log(this.name, this.age);
          }
      
          function Student(myName, myAge, myScore) {
              // let stu = new Object();
              // let this = stu;
              Person.call(this, myName, myAge); // Person.call(stu);
              this.score = myScore;
              this.study = function () {
                  console.log("day day up");
              }
              // return this;
          }
      
          /*
          弊端:
          1.由于修改了Person原型对象的constructor属性, 所以破坏了Person的三角恋关系
          2.由于Person和Student的原型对象是同一个, 所以给Student的元素添加方法的时候, Person也会新增方法
          */
          Student.prototype = Person.prototype;
          Student.prototype.constructor = Student;
          Student.prototype.run = function(){
              console.log("run");
          }
      
          let per = new Person();
          per.run();  // run
      

相关文章

  • 69-继承方式三

    将Student构造函数的原型对象改为Person构造函数的原型对象注意点: 要想使用Person原型对象中的属性...

  • 第十三章 类继承(4)c++的三种继承方式

    (四)c++的三种继承方式 c++有三种继承方式,分别是公有继承,私有继承和保护继承。 (1)公有继承 这是最常用...

  • 原型继承

    原型链的继承 1.第一种继承方式(原型链继承) 2.第二种继承方式(第二种继承方式) 3.第三种继承方式(组合继承)

  • JS中继承的方式

    讨论三种常用的继承方式: 组合继承 原型新对象继承 3 . 寄生继承

  • C++继承,静态成员,const成员

    继承 继承的方式有三种 公共继承 保护继承 私有继承 访问权限publicprotectedprivate对本类可...

  • JS对象和继承

    JS 对象创建的三种方式 字面量创建方式 系统内置构造函数方式 自定义构造函数 继承方式 for in 继承 原型...

  • 4期c++9月18号

    上午 一.继承 1.class 派生类名:继承方式 基类名 { 派生类中的新成员 } 三种继承方式:公有继承:pu...

  • js的继承方式

    js的继承方式 一、原型链继承 原型继承的缺点: 二. 构造函数继承 构造函数继承的缺点: 三. 组合式继承 组合...

  • 7、面向对象的程序设计3(《JS高级》笔记)

    三、继承 许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际方法。由...

  • 继承与派生

    三种继承方式:public、protected、private

网友评论

      本文标题:69-继承方式三

      本文链接:https://www.haomeiwen.com/subject/anuhnqtx.html