聊城市 九龙坡区 大名县 盘山县 宁化县 白城市 尼勒克县 毕节市 邵阳县 河东区 准格尔旗 自治县 原平市 古蔺县 武义县 永城市
您现在的位置:2018年最新新闻网魔都
作者:百年不渡  分类:未来幻想  点击:783308056次  下载:98次  大小:70M  日期:2019-07-20

奔跑吧兄弟_js继承之组合继承(结合原型链继承 和 借用构造函数继承)

标签:板上 手机棋牌游戏运营合作协议书范本

在我的前两篇文章中,我们已经介绍了 js 中实现继承的两种模式:原型链继承和借用构造函数继承。这两种模式都存在各自的缺点,所以,我们考虑是否能将这二者结合到一起,从而发挥二者之长。即在继承过程中,既可以保证每个实例都有它自己的属性,又能做到对一些属性和方法的复用。这样就 perfect 了。

一、回顾借用构造函数继承的缺点

先看我们之前在借用构造函数继承中最后用到的代码:

    //父类:人
    function Person () {
      this.head = "脑袋瓜子";
      this.emotion = ["喜", "怒", "哀", "乐"]; //人都有喜怒哀乐
      this.eat = function () {
        console.log("吃吃喝喝");
      }
      this.sleep = function () {
        console.log("睡觉");
      }
      this.run = function () {
        console.log("快跑");
      }
    }
    //子类:学生,继承了“人”这个类
    function Student(studentID) {
      this.studentID = studentID;
      Person.call(this);
    }
    
    //Student.pr云图_2018年最新新闻网ototype = new Person();

    var stu1 = new Student(1001);
    console.log(stu1.emotion); //["喜", "怒", "哀", "乐"]

    stu1.emotion.push("愁");
    console.log(stu1.emotion); //["喜", "怒", "哀", "乐", "愁"]
    
    var stu2 = new Student(1002);
    console.log(stu2.emotion); //["喜", "怒", "哀", "乐"]

  

  在这段代码中,我们通过借用构造函数继承,保证了 stu1 和 stu2 都有各自的父类属性副本,从而使得各自 emotion 互不影响。但同时带来的问题是,stu1 和 stu2倚天屠龙记之魔教教主_2018年最新新闻网 都拷贝了 Person 类中的所有属性和方法,而在 Person 类中,像 eat ( ), sleep ( ), run ( ) 这类方法应该是公用的,而不需要添加到每个实例上去,增大内存,尤其是这类方法较多的时候。

二、结合使用两种继承模式

  所以我们想到,是否能把这些方法挂载到父类的原型对象上去,实现方法复用,然后子类通过原型链继承,就能调用这些方法啦?~

    //父类:人
    function Person () {
      this.head = "脑袋瓜子";
      this.emotion = ["喜", "怒", "哀", "乐"]; //人都有喜怒哀乐
    }
    //将 Person 类中需共享的方法放到 prototype 中,实现复用
    Person.prototype.花千骨_2018年最新新闻网eat = function () {
      console.log("吃吃喝喝");
    }
    Person.prototype.sleep = function () {
      console.log("睡觉");
    }
    Person.prototype.run = function () {
      console.log("快跑");
    }
    //子类:学生,继承了“人”这个类
    function Student(studentID) {
      this.studentID = studen我爱我家_2018年最新新闻网tID;
      Person.call(this);
    }
    
    Student.prototype = new Person();  //此时 Student.prototype 中的 constructor 被重写了,会导致 stu1.constructor === Person
    Student.prototype.constructor = Student;  //将 Student 原型对象的 constructor 指针重新指向 Student 本身

    var stu1 = new Student(1001);
    console.log(stu1.emotion); //["喜", "怒", "哀", "乐"]

    stu1.emotion.push("愁");
    console.log(stu1.emotion); //["喜", "怒", "哀", "乐", "愁"]
    
    var stu2 = new Student(1002);
    console.log(stu2.emotion); //["喜", "怒", "哀", "乐"]

    stu1.eat(); //吃吃喝喝
    stu2.run(); //快跑
    console.log(stu1.constructor);  //Student

  首先,我们将 Person 类中需要复用的方法提取到 Person.prototype 中,然后设置 Student 的原型对象为 Person 类的一个实例,这样 stu1 就能访问到 Person 原型对象上的属性和方法了。其次,为保证 stu1 和 stu2 拥有各自的父类属性副本,我们在 Student 构造函数中,还是使用了 Person.call ( this ) 方法。如此,结合原型链继承和借用构造函数继承,就完少年包青天_2018年最新新闻网美地雷霆扫毒_2018年最新新闻网解决了之前这二者各自表现出来的缺点。

 

如果你觉得文章解决了你的疑惑的话,还请赏我一个推荐哦~ :)

作者不才,文中若有错误,望请指正,避免误人子弟。

文章内容全都参考于《JAVASCRIPT 高级程序设计》第三版)

当前文章:http://www-yebeimodiao-com.tongmy.cn/yb1m/a063c_155616.html

发布时间:2019-07-20 00:42:35

919银河优越会  银河娱乐首页yh163am.com  澳门银河娱乐送彩金网站  澳门银河官网真人娱乐  919银河优越会  2288银河主站线路检测  2288银河主站线路检测  银河优越会会员申请谷歌再曝恶意插件 比特币可能被Chrome插件劫持  银河优越会下载  澳门银河真人yh163am.com  

您可能还对以下电子书感兴趣

奔跑吧兄弟TXT下载声明:

1 2018年最新新闻网免费提供的奔跑吧兄弟,均由网友上传,供下载测试之用,不作商业用途,下载后请二十四小时后删除!

2 我们根据txt小说全文所整理出奔跑吧兄弟txt电子书全集免费下载,由程序自动生成奔跑吧兄弟txt下载文件。

3 书友所发表的txt小说奔跑吧兄弟的相关评论,并不代表本站赞同奔跑吧兄弟txt下载或者支持奔跑吧兄弟的读者观点。

4 如果发现小说《奔跑吧兄弟txt全集》无法下载未及时更新请联系我们。如果您喜欢奔跑吧兄弟txt电子书,请支持作者到书店购买正版图书。感谢您的合作与支持。

5 好看的小说