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

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

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

  先说说继承是什么吧?也许我们最早接触有关继承的应该是“遗产”??也许电视剧看多了,总有家族为了这玩意儿整的你死我活,确实听看不下去的哈,但是对于咱大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

时间: 2024-10-26 18:35:46

(一)关于面向对象----继承的相关文章

Php面向对象 – 继承和重写

继承: php中,通过在类上,使用特殊的操作达到目的. 通过在定义类时,利用extends来指明当前类对象继承那个类的对象. 例子: class C { public  $p_c =  "value c"; } class D extends C { public  $p_d = "value d"; } $o =  new D; var_dump($o->p_c) var_dump($o->p_d) 输出:string(7) "value c

Java面向对象㈡ -- 继承与多态

Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆盖的概念.覆盖被用来支持多态.实际开发中Java通常继承于抽象类,实现于接口.如果不希望一个类被继承,或者一个方法被覆盖,或者一个成员变量被改变,就可以用final修饰.这里只说明两个问题:1,重载和覆盖的区别重载和覆盖的区别:重载发生在同一个类之中,重载要求函数名相同,参数不同(参数个数||参数类

关于 JS 面向对象继承属性和方法的小例子

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>关于 JS 面向对象继承属性和方法的小例子</h1> </body> </html> <script> //人的构造函

黑马程序员-OC面向对象继承关系和组合关系笔记

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** "是" **  (例如:学生类 是 人类) 组合关系描述的语句是:**** "拥有" ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 ) 继承示例代码: #import <Foundation/Foundation.h> //Animal类的声明 @interface Animal : NS

12.面向对象(继承/super/接口/抽象类)

面向对象继承与派生继承继承顺序继承原理子类调用父类的方法(super)组合接口接口的概念:接口的概念解释和使用:python中的接口:抽象类 面向对象 继承与派生 继承 什么是继承?继承是一种创建新的类的方式 class A: pass class B(A): pass 在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或者超类,新建的类称为派生类或者子类 python中类的继承分为,单继承和多继承. 查看继承的方法B.__bases__ 如果没有指定基类,python的类会默

C#编程语言与面向对象——继承

现实生活中的事物都归属于一定的类别,比如,狮子是一种(IS_A)动物,为了在计算机中模拟这种关系,面向对象的语言引入了继承(inherit)特性. 构成继承关系的两个类中,Animal称为父类(parent class)或基类(base class),Lion称为子类(child class). 父类与子类之间拥有以下两个基本特性: 1.是一种(IS_A)关系:子类是父类的一种特例. 2.扩充(Extends)关系:子类拥有父类所没有的功能. class Animal { } class Lio

.Net学习 第2季02 C#面向对象继承1

.Net 视频学习第2季 C#面向对象 面向对象继承1 查找类的命名空间快捷键:alt+shift+F10 项目A中有类X,要在项目B中使用X的话,首先在项目B的引用当中添加项目A,然后在项目B的代码中添加using A;(假设项目A类X的命名空间就是A)或者在使用X时采用A.X的格式. 记录运行时间 Stopwatch sw = new Stopwatch(); sw.Start(); // 代码 sw.Stop(); Console.WriteLine(sw.Elapsed); Start(

js面向对象继承

前言 最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录. js的面向对象 先说说我目前了解的js创建对象方法 1.写一个函数,然后通过new创建对象 2.字面量的方式 如果想要复用的话,可能会用到工厂方法 工厂方法每次都要创建对象 并返回 构造方法创建对象方法可以更简洁 然而构造方法用实现实例间共享共同的方法,比较麻烦 原型可以实现实例共享所有属性 每个函数都有指向原型对象的指针,如果将一个函数的原型属性赋值给另外函数的实例,函数的原型将指向另外一

CBV-2-CBV流程-view源码解析-面向对象-继承

CBV-2-CBV流程-view源码解析-面向对象-继承 CBV,基于反射实现根据请求方式不同,执行不同的方法. 请求流程:view源码解析 1.urls.py :请求一定来执行视图下的as_view方法. 2.views.py 视图内没有as_view方法,则找父级的as_view方法. 3.源码:as_view返回自己下面的view方法 4.as_view执行了自己view方法,放回值是dispatch方法. 5.dispatch方法判断请求方式. 6.所以请求已经来,第一步先执行的都是di