OOP面向对象三大特点

  (一)封装将现实中一个事物的属性和功能集中定义在一个对象中。(创建对象)

    创建对象的3种方式

      1.直接量方式:(创建一个单独的对象)

      var obj={

        属性名:值,
              方法名:function(){ ...this.属性名...}  

      }

      2. 用new方式:
          var obj=new Object();
          obj.属性名=值;
          obj.方法名=function(){ ...this.属性名...}

      3.反复创建多个相同结构的对象的方式:2步

      ①定义构造函数:

      function 类型名(属性参数列表){

        this.属性名=属性参数;
             /*浪费内存,已被否定 this.方法名=function(){...this.属性名...}*/

      }

      ② 用new调用构造函数: 实例化一个对象。
          var obj=new 类型名(属性值列表);
          /*new: 1.创建新的空对象;2.设置新对象的__proto__继承构造函数的原型对象;3.用新对象调用构造函数,为新对象添加规定的属性和方法。4.将新对象的地址保存到变量中 */

       js中一切对象底层都是hash数组。

  (二)继承:父对象中的成员,子对象无需重复定义,即可直接使用。(代码重用,节约内存)

      js中的继承都是原型继承。

      原型对象:集中存储一类子对象共有成员的父级对象。

      原型链: 由各级对象的__proto__属性逐级继承,形成的链式结构。(原型链控制着对象中属性的使用顺序)

      继承中相关的API:

      1. 判断指定"属性名"是否是obj的自有属性: var bool=obj.hasOwnProperty("属性名")

      2. 判断是否是共有属性:  !obj.hasOwnProperty("属性名") &&("属性名" in obj)

      3. 获取原型对象: 2种方式: 构造函数.prototype;Object.getPrototypeOf(child)

      4. 删除属性: delete 对象.属性名

      5. 判断一个对象是不是数组类型:
           1. 判断father是否是child的原型链上的父级对象:father.isPrototypeOf(child);
           2. 判断child是否是构造函数的实例:child instanceof 构造函数;
         3. 输出对象的内部属性class: Object.prototype.toString.call(obj);
           4. 判断obj是否是数组类型: Array.isArray(obj)

   如何自定义继承: 3种:
           1. 直接修改一个对象继承另一个对象:Object.setPrototypeOf(child,father);
           2. 修改构造函数的原型对象,批量修改之后所有子对象的父对象:构造函数.prototype=father(时机: 在开始创建子对象之前就修改)
           3. 两种类型间的继承: inherits&&extends
             抽象: 如果多个子类型之间有相同的属性结构和方法定义,就要抽象出一个父类型,将相同的属性结构和方法定义统计定义在父类型中。
             在子类型构造函数中借用父类型构造函数:extends扩展
             function 子类型构造函数(...){
               父类型构造函数.call(this,参数1,参数2,...)//new 子类型构造()->this->正在创建的新对象
                 ...扩展新属性
             }
            其实: 父类型构造函数.call(this,参数1,参数2,...)可简写为:父类型构造函数.apply(this,arguments)
            让子类型原型继承父类型原型:inherits继承
           Object.setPrototypeOf(子类型原型, 父类型原型)

      call vs apply:
        相同:都是强行借用任意函数,并替换函数中的this为指定对象。
        不同:参数:
            call,只能将传入借用的函数的参数,单独传入。
            apply,可将传入借用的函数的参数,以数组方式传入。apply可自动打散数组为单个参数。

  (三)多态:

     重写(override):如果子对象觉得父对象继承来的成员不好用,可子定义同名的自有成员,来覆盖父对象的成员。

OOP面向对象三大特点的更多相关文章

  1. OOP面向对象 三大特征 继承封装多态

    OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...

  2. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  3. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  4. OOP 面向对象 七大原则 (一)

    OOP 面向对象   七大原则 (一) 大家众所周知,面向对象有三大特征继承封装多态的同时,还具有这七大原则,三大特征上一篇已经详细说明,这一篇就为大家详解一下七大原则: 单一职责原则,开闭原则,里氏 ...

  5. 用C实现OOP面向对象编程(1)

    如摘要所说,C语言不支持OOP(面向对象的编程).并这不意味着我们就不能对C进行面向对象的开发,只是过程要复杂许多.原来以C++的许多工作,在C语言中需我们手动去完成. 博主将与大家一起研究一下如下用 ...

  6. 夯实Java基础系列1:Java面向对象三大特性(基础篇)

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 [https://github.com/h2pl/Java-Tutorial](https: ...

  7. Swift -POP( 面向协议编程)与OOP(面向对象编程)

    面向协议编程(Protocol Oriented Programming,简称POP),是Swift的一种编程范式,Apple于2015年WWDC提出的,如果大家看Swift的标准库,就会看到大量PO ...

  8. [.net 面向对象编程基础] (11) 面向对象三大特性——封装

    [.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...

  9. [.net 面向对象编程基础] (12) 面向对象三大特性——继承

    [.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...

随机推荐

  1. 在Android studio环境下使用EventBus

    EventBus是一个订阅/发布消息总线,实现在应用程序里面,组件之间,线程之间的通信.因为event是任意的类型,所以这个使用起来非常方便. eventbus中的角色: event:当然就是事件啦 ...

  2. TCP/IP协议头部结构体(网摘小结)(转)

    源:TCP/IP协议头部结构体(网摘小结) TCP/IP协议头部结构体(转) 网络协议结构体定义 // i386 is little_endian. #ifndef LITTLE_ENDIAN #de ...

  3. .NET反射

    反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等程序集内部的信息.使用反射可以看到一个程序集内部的接口.类.方法.字段.属性.特性等等信息.在System.Reflectio ...

  4. S3C2440的SPI解析

    位串行数据的频率.如果只希望发送,则接收数据可以保持伪位(dummy).此外如果只希望接收,则需要发送伪位'1'数据 使用SPI主要需要以下寄存器 选择SPI模式,中断模式,查询模式等SCK选择,主从 ...

  5. sql2005数据库置疑修复断电崩溃索引损坏 数据库索引错误修复/数据库表损坏/索引损坏/系统表混乱等问题修复

    sql2005数据库置疑修复断电崩溃索引损坏 数据库索引错误修复/数据库表损坏/索引损坏/系统表混乱等问题修复 客 户 名 称 济南某电子商务公司 数 据 类 型 SQL2005数据库 故 障 检 测 ...

  6. .NET Core installation guide

      .NET Core installation guide 1.Download Visual Studio 2015 Make sure you have Visual Studio 2015 U ...

  7. iOS 之 线性布局

    本来想自己写一个线性布局的类,看来不用了 ,网上已经有了,我先试试好不好用. https://github.com/youngsoft/MyLinearLayout 线性布局MyLinearLayou ...

  8. Bonferroni校正法

    Bonferroni校正:如果在同一数据集上同时检验n个独立的假设,那么用于每一假设的统计显著水平,应为仅检验一个假设时的显著水平的1/n http://baike.baidu.com/view/12 ...

  9. AngularJS中$http服务的简单用法

    我们可以使用内置的$http服务直接同外部进行通信.$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象. 1.链式调用 $http服务是只能接受一个参数的函数,这个参数是一个对 ...

  10. 【angularjs】【学习心得】ng-class总结

    原文:http://www.imooc.com/wenda/detail/236998 今天来说一点angularjs中看起来很简单但是实践起来又有不少问题的ng-class吧 ----------- ...