zoukankan      html  css  js  c++  java
  • (一)关于面向对象----继承

    (一)关于面向对象----继承

    接触面向对象许久了,对于继承这一块也确实琢磨了一段时间,搜集各种资料和网站,也未能得到使自己满意的,并能快速理解的继承知识,于是对他们归类,并得出自己的总结。

      先说说继承是什么吧?也许我们最早接触有关继承的应该是“遗产”??也许电视剧看多了,总有家族为了这玩意儿整的你死我活,确实听看不下去的哈,但是对于咱大JS而言,可就变得十分和蔼,可亲。毕竟没有人来争夺,也不会有任何事故,最多来些许bug等等。废话不多说,进入正题!!

    1、扩展原型对象继承:往原型对象中添加新的属性。

      这应该是最基础的继承了吧,往对象中添加新的属性和方法,实例就可以共享了。

    直接上例子:

        function Person(){  };

        Person.prototype.say = function(){};

        var p1 = new Person();

        ====》此时,p1就含有say()这个方法了;

    2、替换原型对象继承:需要给实例添加很多方法,一个一个往默认的原型对象中进行扩展会很麻烦,此时我们就可以把默认的原型对象替换掉,一起添加。

      例子:

         function Bird(){};

        Bird.prototype.say = function(){};

         Bird.prototype={

            constructor:Bird,

            c1:function(){},

            c2:function(){},

            c3:function(){}

        };//新的原型对象

        var maque = new Bird();

        console.log(maque);

        console.log(maque.constructor);

        //通过控制台输出,你会发现原来的say方法不存在了,取而代之的是新的c1、c2、c3方法

      

    3、混入继承:将一个对象的功能(属性、方法)拷贝到另一个对象中。

      var o = {name:"王五",age:30};

      var o2 = {gender:"男"};

      //遍历o的功能,将这些功能添加到o2中去

        for(var key in o) {

          o2[key] = o[key];

        }

      console.log(o2);

    4、原型+混入继承

      function Man(){};

      //这里将上述的混入继承封装成了一个函数如下:

      function extend(target, source) {

        for(var key in source) {

          var value = source[key];

          target[key] = value;

        }

        return value;

     }

      //往Man的原型中扩展多个方法(同一对象),调用上述方法。

      extend(Man.prototype, {

        age:function(){},

        height:function(){},

        nation:function(){}

    });

        var hMan = new Man();

        console.log(hMan.age());

    5、原型链继承:创建一个对象,让这个对象继承自另一个对象

        //想要创建一个对象,就需要一个媒介(构造函数);

        function F(){};

        var o2 = {age:30};

        //设置原型对象

        F.prototype=o2;

        var o1 = new F();

    //封装一下就是如下这个样子

        function create(o2) {

          function F(){};

          //设置原型对象

          F.prototype = o2;

          //返回创建的新对象

          return new F();

        }

        

    6、原型链继承:任何对象都是继承自原型对象,原型对象也有他自己的原型对象。(学好原型链)

    7、借用构造函数继承:在子类构造函数的内部调用超类型构造函数,可以通过apply()和call()方法,在新创建的对象上执行构造函数。

      function SuperType() {

        this.colors = { "red", "blue","green"};

      }

      function SubType(){

        //继承了SuperType

        SuperType.call(this);

      }

      var instance1 = new SubType();

      instance1.colors.push("black");

      console.log(instance1.colors); //red,blue,green,black

      var instance2 = new SubType();

      console.log(instance2.colors);//red,blue,green

    转载:http://www.cnblogs.com/Brookeshan/p/6091467.html

  • 相关阅读:
    hdu6315 Naive Operations
    noi.ac #525 神树的权值
    JSOI2018 潜入行动
    GXOI/GZOI2019 旅行者
    Educational Codeforces Round #67
    [六省联考2017] 分手是祝愿
    NOI2014 随机数生成器
    NOI2012 随机数生成器
    USACO19JAN Redistricting
    HNOI2015 菜肴制作
  • 原文地址:https://www.cnblogs.com/gh0408/p/6091514.html
Copyright © 2011-2022 走看看