JavaScript进阶-编程思想、构造函数的原型对象、对象原型、原型继承以及原型链
编程思想
面向过程
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次 调用就可以了。
优点:
性能比面向对象高,适合跟硬件联系很紧密 的东西,例如单片机就采用的面向过程编程。
缺点:
没有面向对象易维护、易复用、易扩展。
面向对象
面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。
特性:
1.封装性;
2.继承性;
3.多态性。
优点:
易维护、易复用、易扩展,由于面向对象有封装 、继承、多态性的特性,可以设计出低耦合的系统,使 系统 更加灵活、更加易于维护。
缺点:
性能比面向过程低。
构造函数
总结:
1. 构造函数体现了面向对象的封装特性;
2. 构造函数实例创建的对象彼此独立、互不影响。
原型
原型对象
实际上每一个构造函数都有一个名为 prototype
的属性,译成中文是原型的意思,prototype
的是对象类据类型,称为构造函数的原型对象,每个原型对象都具有 constructor
属性代表了该原型对象对应的构造函数。
说明:
一个对象,我们也称为 prototype 为原型对象。
作用:
共享方法 ,可以把那些不变的方法,直接定义在 prototype 对象上。
机制:
当访问对象的属性或方法时,先在当前实例对象是查找,然后再去原型对象查找,并且原型对象被所有实例共享。
构造函数、原型对象里的this指向的是实例对象。
constructor 属性
作用:
该属性指向该原型对象的构造函数。
使用场景:
如果有多个对象的方法,我们可以给原型对象采取对象形式赋值. 但是这样就会覆盖构造函数原型对象原来的内容,这样修改后的原型对象 constructor 就不再指向当前构造函数了 此时,我们可以在修改后的原型对象中,添加一个 constructor 指向原来的构造函数。
// 1.创建一个构造函数function Star() {}// 4.重新赋值之前打印console.log(Star.prototype) // {constructor: ƒ}// 2.追加方法Star.prototype = {// 5.添加constructor属性,让实例对象能指回其构造函数constructor: Star,sing: function () {console.log('唱歌')},sing: function () {console.log('唱歌')}}// 3.打印console.log(Star.prototype) // Object 没有constructor 属性 6.重新打印后有constructor属性
对象原型
对象都会有一个属性 __proto__ 指向构造函数的 prototype 原型对象,之所以我们对象可以使用构造函数 prototype 原型对象的属性和方法,就是因为对象有 __proto__ 原型的存在。
注意:
1. __proto__ 是JS非标准属性;
2. [[prototype]]和__proto__意义相同;
3.用来表明当前实例对象指向哪个原型对象prototype ;
4. __proto__对象原型里面也有一个 constructor属性,指向创建该实例对象的构造函数。
原型继承
// 原型继承// 1.声明一个公共的对象 6.bug解决:因5的方法添加到原型对象上,会导致Woman也会继承该方法,所以将1.的对象改为构造函数function Person() {this.eyes = 2this.hand = 1}// 2.创建构造函数function Man() {}// 3. 公共的对象放在原型上,让其继承 7.将对象名persen改成调用构造函数Man.prototype = new Person()// 4. 利用constructor属性再指回构造函数Man.prototype.constructor = Man// 5.给Man添加一个方法smokingMan.prototype.smoking = function () {console.log('抽根烟')}const li = new Man()console.log(li)// Woman 也可以继承function Woman() {}// 3. 公共的对象放在原型上,让其继承Woman.prototype = new Person()// 4. 利用constructor属性再指回构造函数Woman.prototype.constructor = Womanconst lu = new Woman()console.log(lu)
原型链
说明:
基于原型对象的继承使得不同构造函数的原型对象关联在一起,并且这种关联的关系是一种链状的结构,我们将原型对 象的链状结构关系称为原型链。
描述:原型链就是一种查找规则:
1.当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性;
2.如果没有就查找它的原型(也就是 __proto__指向的 prototype 原型对象;
3.如果还没有就查找原型对象的原型(Object的原型对象);
4.依此类推一直找到 Object 为止(null)
5.__proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。
instanceof:
说明:检测原型对象是否在其构造函数的原型链上。
今日单词
单词 | 说明 | 语法 |
instanceof | 检测原型对象是否在其构造函数的原型链上 | 实例对象.prototype instanceof 构造函数 |
__proto__ | 用来表明当前实例对象指向哪个原型对象prototype |
原型对象._proto |
prototype | 原型对象 | 原型对象._proto |
constructor | 该属性指向该原型对象的构造函数。 | prototype.constructor |
综合案例
面向对象封装消息提示:阿里云盘分享
JavaScript进阶-编程思想、构造函数的原型对象、对象原型、原型继承以及原型链相关推荐
- JavaScript 面向对象编程思想
JavaScript 面向对象编程思想 什么是面向对象 面向对象不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性. 面向对象编程 -- Object Oriented ...
- (二)Javascript面向对象编程:构造函数的继承
Javascript面向对象编程:构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承&q ...
- 《JavaScript函数式编程思想》
自序 伴随着Web技术的普及,JavaScript已成为应用最广泛的编程语言之一.由于其在Web前端编程中的统治地位.语言本身的表现力.灵活性.开源的本质和ECMAScript标准近年来的快速发展,J ...
- 《JavaScript函数式编程思想》——名称
第1章 名称 一般对函数式编程的介绍都会从一等值和纯函数等概念开始,本书却准备在那之前先花些篇章讨论两个通常未得到足够重视的主题:名称和类型系统.前者包括名称绑定.作用域和闭包等内容,后者包括类型的 ...
- 《JavaScript函数式编程思想》——递归
第7章 递归 王二.张三和赵四一日无聊,决定玩击鼓传花讲冷笑话的游戏.王二和张三围成一圈传花,赵四负责击鼓.张三接连讲了几个诸如小菜.狐狸狡猾的笑话.花停在了王二的手中. 王二:这个笑话很短.你要保 ...
- JavaScript 面向对象编程思想简介
JavaScript 面向对象编程 JavaScript 执行过程 JavaScript 面向对象编程 面向对象介绍 什么是对象 什么是面向对象 程序中面向对象的基本体现 创建对象 简单方式 简单方式 ...
- JavaScript函数式编程思想
欢迎访问个人网站 最开始接触函数式编程的时候是在小米工作的时候,那个时候看老大以前写的代码各种 compose,然后一些 ramda 的一些工具函数,看着很吃力,然后极力吐槽函数式编程,现在回想起来, ...
- JAVA编程思想学习笔记——第一章 对象导论
搞了一年多java,野路子出身,发现java基础这块还是相当的薄弱!故决定学习<Java编程思想>这本书.在此把学习的知识点记录下! 面向对象的五大特性 1.万物皆为对象 2.程序是对象的 ...
- java编程思想读书笔记二(对象的创建)
有兴趣的同学可以移步笔者的个人博客 更多博客 java对象 对象的创建 java的对象是在运行时创建的,创建对象的的触发条件有以下几种: 用new语句创建对象,这是最常用的创建对象方法. 运用反射手段 ...
最新文章
- DllMain中不当操作导致死锁问题的分析--加载卸载DLL与DllMain死锁的关系
- python tuple类型和list_Python 04_List 和 Tuple 类型
- stm8s003 8K空间不够用,出现报错,修改stvd参数进行最优化
- 分享一个多线程实现[冒泡][选择][二分法]排序的例子
- Python开发者的完美终端工具
- isecure center 综合安防管理平台_企业综合安全管理平台
- TCP的三次握手和四次挥手理解及面试题
- torch安装及CUDA和torch版本的对应关系
- 卡巴斯基6.0的授权文件
- URL地址 长度超出限制问题解决
- 【PTA-乙级】1019 - 数字黑洞(4种解法)(C/C++)
- 数据库-内外连接及左右连接的区别
- 正阅读微信小说分销系统-视频教程-1.渠道商-公众号配置-基础信息
- IBM出手 蓝色巨人收购蓝色巨狼
- 中兴和华为的面试经历
- 如何在网页端登录企业邮箱修改密码?
- Android 找不到资源异常,Android 问题之找不到资源解决办法
- linux 磁盘不回收站,避免误删文件:Linux回收站机制
- 【移动网络】Ch. 2 移动网络基本原理 (Part1. 无线信道与数据率)
- Windows系统下查询WiFi信道及强度等信息
热门文章
- [rust学习笔记]数据类型
- 二级vb计算机考试试题,2016计算机二级vb考试题及答案
- 模拟简单计算器编程c语言,模拟计算器程序
- 网络舆情热点发现及分析(single-pass聚类)
- 高分辨率影像卫星之法国
- android即时通讯开发!一个三非渣本的Android校招秋招之路,附答案
- 部队应急通信指挥调度方案
- Android SDK删除内置的触宝输入法
- AutoCAD入门级小技巧教程
- matlab fts2mat,[原创]基于MATLAB的通达信股价数据的复权处理(fantuanxiaot版本)