一、封装

(1)封装通俗的说,就是我有一些秘密不想让人知道,就通过私有化变量和私有化方法,这样外界就访问不到了。然后如果你有一些很想让大家知道的东西,你就可以通过this创建的属性看作是对象共有属性和对象共有方法,这样别人知道你的公共的东西啦,不止如此,你还可以访问到类或对象自身的私有属性和私有方法。哇,这种权利好大呀,外面的公共的方法和属性,和内部的私有属性和方法都可以访问到,都有特权啦,因此就叫做特权方法了。看个例子就知道啦。

类的内部this上定义的属性和方法自然就可以复制到新创建的对象上,成为对象公有化的属性和方法,又可以访问私有属性和私有方法,因此就叫特权方法。

这样调用就可以啦

(2)闭包实现的封装

  闭包是有权访问另外一个函数作用域中变量的函数,即在一个函数内部创建另外一个函数。这时就可以将闭包作为创建对象的构造函数,这样它既是闭包又是可实例对象的函数。

二、继承

  (1)类

   每个类有3个部分:1,是构造函数内的,是供实例化对象复制用的。2,是构造函数外的,直接通过点语法添加的,这是供类使用的,实例化对象是访问不到的。3,是类的原型中的,实例化对象可以通过其原型链简介地访问到,也是为供所有实例化对象所共有的。

(2)类式继承

通过子类的原型prototype对象实例化来实现的

  

继承就是声明2个类,不过类式继承需要将第一个类的实例赋值给第二个类的原型。这段代码,在实现subClass继承superClass时是通过将superClass的实例赋值给subClass的原型prototype,所以subClass.prototype继承了superClass.

缺点就是:一个子类的实例原型从父类构造函数中继承来的共有属性就会直接影响到其他子类。比如:

额外知识点:instanceof是通过对象的prototype链来确定这个对象是否是某个类的实例,而不关心对象与类的自身结构。

(3)构造函数式继承

构造函数式继承是通过在子类的构造函数作用环境中执行一次父类的构造函数来实现的。

     

SuperClass.call(this,id);是构造函数式继承的精华,call可以更改函数的作用环境。这个对SuperClass调用这个方法就是将子类中的变量子啊父类中执行一遍,由于父类中是给this绑定属性的,因此子类自然也就继承了父类的共有属性。由于这种类型的继承没有涉及原型prototype,所以父类的原型方法自然不会被子类继承,而如果要想被子类继承就必须要放在构造函数中。

  (4)组合继承

组合继承就是:类式继承+构造函数继承

这里用例子来测试下

果然子类的实例中更改父类继承下来的引用类型属性如books,根本不会影响到其他实例,并且子类实例化过程中又能将参数传递到父类的构造函数中。

(5)原型式继承

原型式继承跟类式继承一样,父类对象book中的值类型的属性被复制,引用类型的属性被共有。

(6)寄生式继承

通过在一个函数内的过渡对象实现继承并返回新对象的方式,称之为寄生式继承。

寄生就像寄生虫一样寄托于某个对象内部生长。就是对原型继承的第二次封装,并且在这第二次封装过程中对继承的对象进行了扩展,这样新创建的对象不仅仅有父类中的属性和方法而且还添加了新的属性和方法。

看下下面的例子吧

(7)寄生组合式继承

寄生组合式继承就是寄生式继承+构造函数式继承,

先创建了父类,还有父类的原型方法,然后创建子类,并在构造函数中实现构造函数式继承,然后又通过寄生式继承了父类 原型,最后又对子类添加了一些原型方法。

现在我们来测试一下

显然不会出现子类调用之后,另一个子类的值被改变。在这里其中最大的改变是对子类原型的处理,被赋予父类原型的一个引用,这是一个对象。

(8)多继承

通过这种方式对一个对象属性的复制继承,将多个父类(对象)的属性与方法拷贝给子类实现继承

三、多态

多态就是通过对传递的参数判断来执行逻辑,即可实现一种多态处理机制

下面就是这个例子,通过多态类,调用add运算方式,根据不同参数做运算

这就是面向对象的三种特性啦,封装、继承、多态,对原理的理解,能在看其他人的优秀代码的时候,有个很好的理解。

JS面向对象编程之:封装、继承、多态相关推荐

  1. JS面向对象编程之封装

    我们所熟知的面向对象语言如 C++.Java 都有类的的概念,类是实例的类型模板,比如Student表示学生这种类型,而不表示任何具体的某个学生,而实例就是根据这个类型创建的一个具体的对象,比如zha ...

  2. 【C语言】C语言实现面向对象编程之封装

    00. 目录 文章目录 00. 目录 01. 前言 02. 简单程序示例 03. 程序示例优化 04. 总结 05. 参考 01. 前言 面向对象编程(OOP)并不是一种特定的语言或者工具,它只是一种 ...

  3. c语言编程 菲薄拉,C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

  4. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  5. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  6. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  7. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

    编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...

  8. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

  9. 小白理解——封装继承多态

                                      一.封装 是什么:首先是抽象,把事物抽象成一个类,其次才是封装.对外表示为一个对象,隐藏对象的属性和动作实现的细节,仅对外公开接口. ...

  10. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

最新文章

  1. 如何实现文字翻译,这个技巧你需要掌握
  2. 机械硬盘 mysql调优_【MYSQL】使用RAID增加传统机器硬盘的性能
  3. 事务管理基础:两段锁协议、活锁、死锁相关知识整理
  4. C# 调用 Microsoft.VisualBasic.Collection
  5. 实现标题条的显示与隐藏
  6. 用python怎么下载_如何使用python下载视频
  7. android模拟器 dx,dx欧布奥特曼变身模拟器
  8. 哈工大威海算法设计与分析_【斯坦福算法分析和设计02】渐进分析
  9. 瑞典抢发区块链数字货币 E-Krona!
  10. 使用Flex4画图形
  11. 基于三菱PLC的两轴圆弧插补
  12. 用Python爬取斗鱼各区的主播信息,并制作热度排行榜
  13. 一花独放不是春 远光软件区块链业务赚钱背后 链圈仍在过冬
  14. SMB CIFS DOMIAN
  15. 被手机“绑架”又不能完全指望手机的柔宇科技,上市之后会是一片坦途吗?
  16. Hive-beeline启动脚本
  17. CentOS 6.8 数据库安装5.5.32
  18. JAVA中的getBytes()方法
  19. MySQL数据类型对应Java数据类型
  20. XTU降压并实现开机自启

热门文章

  1. 如何使用腾讯会议录屏?腾讯会议不允许录屏怎么办?这个方法教你解决
  2. 几种常用的假设图像边界条件用于抑制振铃效应及实现(下)
  3. 【重识云原生】第四章云网络4.8.2.2节——OpenFlow协议详解
  4. (三)OpenFlow协议
  5. 配置springboot使用c3p0连接池
  6. IP地址,同一网段,子网掩码,默认网关,添加路由
  7. 唐老师 oracle,ORACLE数据库表空间的监控和维护_快速发表职称论文网
  8. Unable to find rebel.xml in artifact eui:war. This file is required to enable JRebel reloading.
  9. java oshi获取服务器各种信息
  10. javascript 操作 cookies