什么是面向对象:

对象由两部分构成:属性 和 方法;

面向对象的特点:

  • 1.封装:对于相同功能的代码,放在一个函数中,以后再用到此功能,只需要调用即可,无需再重写;避免大量冗余代码;

    专业话说:低耦合,高内聚;

  • 2.继承:子类继承父类原有的属性和方法;

    类:'Object','Function','Number','String','Array','RegExp','Date'.....

  • 3.多态:重载和重写;

    重载:在JS中不存在严格意义上的重载;但是,JS中有类似重载的功能:同一个函数,传不同的参数,实现不同的功能;

    重写:子类可以重写父类的属性和方法;

  • 4.会学到的设计模式:单例模式,工厂模式,构造函数模式,原型模式;

  • 5.单例模式:把描述同一事物的属性和方法,放在同一个命名空间下,避免了变量名冲突的问题

    命名空间:浏览器开辟了一个堆内存,给他分配的名字person1就是命名空间

    单例模式本质:普通对象;

  • 6.模块化开发:对于一个大型项目,项目组会分配给不同的工程师去开发(这些开发是同步进行的);等所 有人开发完成,合在一起,整个项目就完成了;

    • 1)单例就是简单的模块化开发;
    • 2)可以实现本模块间的相互调用:this.属性名;
    • 3)可以实现模块之间的相互调用:模块名.属性名;
  • 7.单例模式的优缺点:

    • 优点:

      • 1)可以实现模块化开发
      • 2)避免了属性名相同,以及变量名相同的冲突问题;
    • 缺点:传统的手工作业模式,开发效率低,并且造成大量冗余代码;

    解决措施:封装--工厂模式

  • 8.工厂模式的思想:

    • 1.引进一批原材料----1.var obj={}; var obj=new Object();我们自己创建一个空对象
    • 2.对原材料进行加工---2.给空对象添加一些私有的属性和方法;
    • 3.输出原材料---3.输出对象 return obj;

    工厂模式的本质:封装;

  • 9.构造函数模式:--为了自定义一个类,并且可以创建一些实例;

    实例 instanceOf 类;==》返回的是 boolean值;

    构函数模式跟工厂模式的区别:
    • 1.在调用时候

      • 构造函数 new Person();
      • 工厂模式 person();
    • 2.在函数体内的区别;

      • 构造函数:系统自动创建一个对象,等我们给对象加工完成后,系统自动输出该对象;
      • 工厂模式:手动创建对象,等我们给对象加工完成后,手动输出对象;

      缺点:对于相同的功能,却不相等;

      解决措施:prototype原型,把功能相同的代码,放在一个公共区间;

  • 10.关于构造函数:

    • 1.构造函数中放的都是私有的属性和方法;
    • 2.就是实例和类在打交道;
    • 3.在创建一个实例的时候,如果不需要传参,小括号可以省略;
    • 4.构造函数this,永远指向当前实例;
    • 5.在构造函数中,实例只跟this.xxx有关系,跟变量没有任何关系;
    • 6.构造函数中,系统默认会为我们返回一个对象;如果我们手动返回的话:
      • 1)return 基本数据类型,不会造成任何影响;实例还有他的属性和方法;
      • 2)return 引用数据类型,会影响系统返回的对象,实例就没有他以前的属性和方法了; 所,不建议手动返回对象;
  • 11.原型模式:原型 prototype

    • 1 当我们声明了一个函数(构造函数,类)的时候,天生自带了一个prototype的属性

      • 1 并且这prototype的值也是一个对象类型的
      • 2这个对象类型值也有一个天生自带的属性叫constructor并且这个性的值是函数(构造函数,类)本身
    • 2 这个类的实例也会有一个叫做__proto__的天生自带的属性,并且这个属性的值也是一个对象类型的这个值是这个实例所属类的原型.
    • 3 每一个引用类型都有一个天生自带的属性叫__proto__,所以说我们的prototype的值也有天生自一个__proto__的属性。并且这个属性的值也是一个对象类型,一直到我们的基类Object
    • 4 通过类的原型添加的属性和方法都是公有的,每个实例都会自带
    • 5 一个实例的方法在运行的时候,如果这个方法是自己私有的,那么就直接用,如果不是私有的,那通过__proto__去所属类的原型上去查找,如果还没有就通过原型的 __proto__一直查到基类的Object.果还没有报错,如果有就直接用了。我们把这种通过__proto__查找的机制叫做原型链.
  • 12.原型模式的基础知识:重中之重

    • 1)每一个函数数据类型(类,普通函数)上都天生自带一个属性,叫做prototype(原型),它是一个对象;
    • 2)prototype这个原型上,天生自带一个属性,叫做constructor,指向当前所属的类; constructor:类;
    • 3)每个对象(实例,普通对象,prototype)上,都天生自带一个属性,叫做__proto__,他指向当前实例所属的类的原型;
  • 13.Object.prototype:都放的公有的属性和方法

    • hasOwnProperty:判断attr这属性是否是这个对象上的私有属性;
    • isPrototypeOf:obj1是否在obj2的原型链上;
    • propertyIsEnumerable:是否可枚举的属性;
  • 14

    • 每个类都是函数数据类型;
    • Object是对象数据类型的基类;
  • 15

    • 构造函数模式:实例 和 类;
    • 原型模式:实例 , 类, 原型;
    • 构造函数里:私有的属性和方法;
    • prototype上:公有的属性和方法;
  • 16.原型链查找机制:比如要查找f1.x==>对象.属性名

    • 1)在自己的私有属性上查找,如果找到那么这个属性就是私有属性;
    • 2)如果没找到,通过__proto__去所属类的原型上进行查找,因为原型上放的都是公有的属性和方法,所以,如果找到,这个属性就是公有的;
    • 3)如果没找到,通过__proto__一层层往找,最终找到基类Object.prototye上,如果还没有,undefined!
  • 17.重写:子类通过__proto__一级级往上去修改父类的属性和方法;这就是子类对父类的重写; 既然子类可以重写父类,系统为了防止子类通过__proto__去更改系统内置的属性和方法,所以在IE浏览器下,禁止我们使用__proto__;

    • 18.继承:子类可以继承父类原有的属性和方法,但是当子类添加私有属性和方法的时候,不对父类造成影响;
    • 1)原型链继承:把父类的私有+公有的属性和方法,都作为子类公有的属性; 核心:不是把父类私有+公有的属性克隆一份一模一样的给子类的公有吧;他是通过__proto__建立和子类之间的原型链,当子类的实例需要使用父类的属性和方法的时候,可以通过__proto__一级级找上去使用;
    • 2)call继承:把父类私有的属性和方法给了子类私有的属性和方法; 核心思想:相当于把父类私有的属性和方法克隆了一份一模一样的给子类的私有属性;
    • 3)冒充对象继承:把父类公有的+私有的属性都作为了子类私有的属性;
    • 4)混合继承1:call继承+原型链继承 call继承:把父类私有的作为自己私有的; 原型链继承:把父类私有+公有做为公有的; 问题:父类私有的,在子类私有+公有两个地方都存在;
    • 5)混合继承2:call继承+拷贝继承 call继承:把父类私有的作为自己私有的; 拷贝继承:通过for in循环,把父类公有的属性和方法克隆了一份一模一样的给子类公有的;
    • 6)寄生式组合继承: call继承:把父类私有的作为自己私有的;
  • Object.create()思想:

    • 1)创建一个空类;
    • 2)给空类的原型上添加了父类原型的地址;(相当于把父类原型上的公有属性和方法,给了空类原型上)
    • 3)子类的原型上添加空类的实例;(这样,子类就可以通过__proto__去找父类公有的属性和方法;但是不受父类私有属性的影响)
  • 18.继承 继承:子类可以继承父类原有的属性和方法,但是当子类添加私有属性和方法的时候,不对父类造成影响;

    • 1)原型链继承:把父类的私有+公有的属性和方法,都作为子类公有的属性; 核心:不是把父类私有+公有的属性克隆一份一模一样的给子类的公有吧;他是通过__proto__建立和子类之间的原型链,当子类的实例需要使用父类的属性和方法的时候,可以通过__proto__一级级找上去使用;
    • 2)call继承:把父类私有的属性和方法给了子类私有的属性和方法;
      • 核心思想:相当于把父类私有的属性和方法克隆了一份一模一样的给子类的私有属性;
    • 3)冒充对象继承:把父类公有的+私有的属性都作为了子类私有的属性;
    • 4)混合继承1:call继承+原型链继承
      • call继承:把父类私有的作为自己私有的;
      • 原型链继承:把父类私有+公有做为公有的;
      • 问题:父类私有的,在子类私有+公有两个地方都存在;
    • 5)混合继承2:call继承+拷贝继承
      • call继承:把父类私有的作为自己私有的;
      • 拷贝继承:通过for in循环,把父类公有的属性和方法克隆了一份一模一样的给子类公有的;
    • 6)寄生式组合继承:
      • call继承:把父类私有的作为自己私有的;
      • Object.create()思想:
        • 1)创建一个空类;
        • 2)给空类的原型上添加了父类原型的地址;(相当于把父类原型上的公有属性和方法,给了空类原型上)
        • 3)子类的原型上添加空类的实例;(这样,子类就可以通过__proto__去找父类公有的属性和方法;但是不受父类私有属性的影响)

转载于:https://www.cnblogs.com/Scar007/p/7640560.html

关于JS的面向对象总结相关推荐

  1. 我来重新学习js的面向对象(part 4)

    我来重新学习js 的面向对象(part 4) 续上一篇,随着业务越来越大,要考虑一些继承的玩意了,大千世界,各种东西我们要认识和甄别是需要靠大智慧去分门别类,生物学中把动植物按界.门.纲.目.科.属. ...

  2. 类的扩充 js中面向对象的技术

    类的扩充 ps,纠正之前的一个错误,之前直接重新提交函数的,而重新提交函数表明这是讲之前的函数清空,重新引用,注意:这样的话已经不存在引用关系,所以这样对于类的修改,不会影响其原先继承的修改 类的扩充 ...

  3. JS用面向对象的思想实现的购物车

    JS用面向对象的思想实现的购物车 首先先了解面向对象的编写思想. 有面向过程的编程和面向对象的编程. 面向过程:举一个经典例子:把大象放进冰箱里. 首先第一个过程是先打开冰箱,2.然后就是把大象放进去 ...

  4. 深入理解JS的面向对象(更新中)

    面向对象是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世 ...

  5. JS的面向对象二(通过构造函数的方式)

    通过按住鼠标拖动的例子来演示面向对象的过程 css部分 #box1{ width: 100px; height: 100px; background: #f00; position: absolute ...

  6. 纯原生JS用面向对象class方法实现简易扫雷小游戏

    Demo介绍 纯原生js 实现 且用ES6语法class写的扫雷小游戏:布局为10*10的网格,随机生成10-20个雷. 左键点击扫雷.右键标记该地方有雷.该demo下载下来复制到html文件中直接可 ...

  7. JS高级----面向对象

    面向对象 面向对象是一种编程思想. 主要是把事物给对象化,包括其属性和行为.总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象. 构造函数: 构造函数是专门用于创建对 ...

  8. 前端与移动开发----JS高级----面向对象编程,类与实例对象,继承,严格模式,模板字符串,class封装tab栏

    JS高级01 回顾上阶段 Javascript组成 ECMAScript: 基础语法 (变量, 表达式, 循环, 判断, 函数, 对象等) DOM: document 操作标签(获取, 增加, 插入, ...

  9. Javascript基础进阶(十六)JS中面向对象的理解、继承、封装、多态

    小编推荐:Fundebug提供JS错误监控.微信小程序错误监控.微信小游戏错误监控,Node.j错误监控和Java错误监控.真的是一个很好用的错误监控费服务,众多大佬公司都在使用. 面向对象编程OOP ...

  10. JS基础——面向对象编程OOP

    面向对象编程有三大特点:封装.继承.多态.JS中不存在多态的概念,因此JS不是面向对象的语言,是基于对象的语言. 封装 将一个实体的信息.功能等都封装在一个对象上的特性.JS中的构造函数和类都是封装d ...

最新文章

  1. 【Git】git 与远程库交互
  2. bat kafka启动_windows 搭建kafka、zookeeper环境
  3. Ubuntu 14.04 改变文件或者文件夹的拥有者
  4. 11gOCP 1z0-052 :2013-09-11 MGR_ROLE role........................................................A66
  5. poj 1338 Ugly Numbers(丑数模拟)
  6. 印度孟买机器人餐厅_印度孟买自动化展:该国最重要、规模最大的国际自动化展...
  7. linux内核更新 2.6.38,Linux内核 2.6.38版本预计到四月初完成
  8. netty源码阅读之UnpooledByteBufAllocator
  9. Flutter Hero动画让你的APP页面切换充满动效 不一样的体验 不一样的细节处理
  10. 发现Diolar 的边缘检测程序好像也有缺点
  11. C#设计模式之简单工厂模式
  12. 计算机表格斜杠怎么打,『excle表格怎么做斜杠线』excel怎么打斜杠
  13. 【云安全课程】云平台使用安全
  14. java robot api_用java Robot API 模拟实现类似按键精灵功能
  15. 趣味Python — 不到20行代码制作一个 “手绘风” 视频
  16. 解决在Word安装Mendeley失败,提示“错误429:activex部件不能创建对象“问题
  17. status计算机语言,status 在c语言中的用法?请高手指教、、、、谢谢
  18. uva 10066 LCS
  19. java调用百度地图api,展示北京地铁路线
  20. 如何通过TXT文件批量生成DataMatrix码

热门文章

  1. 如何把握软件产品的质量
  2. 网站的前期策划准备工作
  3. 《java程序员全攻略:从小工到专家》连载一:外行人眼中的IT人
  4. UCenter Home 1.5的基本配置与技巧
  5. python上下文管理器ContextLib及with语句
  6. 【论文阅读】Abdominal multi-organ segmentation with organ-attention networks and statistical fusion
  7. html包含头尾文件_Html介绍及工具下载
  8. 怎么用sql按条件把表分离_在做sqlserver数据库sql优化时,这25条事项需要注意
  9. 逆向链表c语言,C语言逆向打印双向链表程序
  10. react中dispatch_reactjs – TypeError:dispatch不是函数.在React无状态组件中