JS面向过程+面向对象编程区别,原型的应用
1.1面向过程编程
思路:面向过程就是分析出解决问题所需要的步骤,再用函数把这些步骤一步一步实现,使用的时候一个一个的依次调用即可。
1.2面向对象过程
思路:把事务分解成一个一个对象,然后由对象之间分工与合作。
面向对象是以对象功能来划分问题的而不是步骤。
特性:封装性,继承性,多态性
2构造函数
封装是面向对象思想中比较重要的一部分,JS面向对象可以通过构造函数实现的封装。
总结:
①构造函数提现了 面向对象的封装特性
②构造函数实例创建的对象彼此独立,互不影响
function Star(uname,age){
this.uname = uname
this.age=age
this.sing = function(){
console.log('我会唱歌')}
}
//实例对象,获得了构造函数中封装的所有逻辑
const ldh = new Star('刘德华',18)
const zxy = new Star('张学友',18)
2.1 封装是面向对象思想中比较重要的一部分,JS面向对象可以通过构造函数实现的封装
之前我们学过的构造函数的方法很好用,但是存在浪费内存的问题
2.2 面向对象编程的特性,比如封装性,继承性等,可以借助构造函数来实现。
总结:JS面向对象可以借助构造函数来实现。但是构造函数存在浪费内存的问题。
3 原型
上述说构造函数有浪费内存的问题,所以这个问题通过什么来解决?
原型!
3.1原型
原型是什么 ?一个对象。我们也成为了prototype原型对象。
每一个构造函数都有一个prototype属性 (也就是原型对象)
这个对象可以挂载函数,因此对象实例化不会多次创建原型上的函数 来节约内存
我们通常把一些不需要变化的方法,直接定义在prototype对象上,这样所有对象的实例化就可以共享这些方法。
构造函数和原型对象中this 都是指向 实例化的对象
.1
<script>//构造函数function Star(uname,age){//this的指向是实例化对象this.uname=uname;this.age=age;// this.sing =function(){// console.log('唱歌')// }// this.rap=function(){// console.log('rap')// }}const ldh = new Star('ldh',18)const zxy = new Star('zxy',18)console.dir(Star.prototype)//构造函数的原型对象 prototype Star.prototype.sing=function(){console.log('唱歌')}//也可以直接用 赋值Star.prototype.eye=2;console.log(ldh.eye);console.log(ldh.sing===zxy.sing)</script>
3.1.2this 指向问题?
构造函数和原型对象中的this都指向实例化的对象
案例对比
现在构造函数
3.2 constructor 属性
每个原型对象里面都有个constructor属性 (constructor构造函数)
作用:该属性指向该原型对象的构造函数,简单理解,就是指向我的爸爸 ,我是有爸爸的孩子
总结:constructor 属性指向原型对象的构造函数。
3.3 对象原型
对象都会有一个属性 __proto__ 指向 构造函数的prototype 原型对象。之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有 __proto__ 对象原型的存在。
注意事项:
①__proto__ 是JS非标准属性
3.4原型继承
继承是面向对象编程的另一个特征,通过继承进一步提升代码的封装的程度,JavaScript中大多是借助原型对象实现继承的特性。
原型继承的封装
把公共的部分抽取出来 放到一个类里面
原型继承的继承
继承让两个不同的函数 继承 一个公共类的属性和方法
分析原因?
解决?
利用构造函数 new 实例化 每次都可以生成一个新对象的方法
修改后
3.5原型链
查找规则
JS面向过程+面向对象编程区别,原型的应用相关推荐
- JS 面向对象编程、原型链、原型继承(个人学习总结)
一.面向对象 1. 面向对象 是所有语言 都有的一种编程思想,组织代码的一种形式 基于对象的语言:JS语言 面向对象的语言:c++ java c# 2. 面向对象 3大特征 封装:将重用代码封装到函数 ...
- JS中的面向对象编程
JS中的面向对象编程 小课堂 目录 1.背景介绍 2.知识剖析 3.常见问题 4.解决方案 5.编码实战 6.扩展思考 7.参考文献 8.更多讨论 1.背景介绍 什么是对象? ECMA-262把对象定 ...
- VSCode自定义代码片段9——JS中的面向对象编程
JavaScript的面向对象编程 {// JS'OOP// 9 如何自定义用户代码片段:VSCode =>左下角设置 =>用户代码片段 =>新建全局代码片段文件... =>自 ...
- Java面向对象(OOP)--面向过程 面向对象 OOP详解
1. 面向过程 & 面向对象 语言的进化发展跟生物的进化发展其实是一回事,都是"物以类聚".相近的感光细胞聚到一起变成了我们的眼睛,相近的嗅觉细胞聚到一起变成了我们的鼻子. ...
- [js] 举例说明面向对象编程有什么缺点?
[js] 举例说明面向对象编程有什么缺点? 有实例化开销,内存消耗比较大,性能消耗比较大 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌 ...
- 什么是面向对象编程?面向对象和面向过程有什么区别?
面向对象 面向对象的程序设计(Object-Oriented Programming,简记为OOP),是当下最流行的程序设计方式之一.在面向对象的设计思想中,将程序视为多个对象共同协作的结果.程序被划 ...
- 面向对象和面向过程之间的区别以及优缺点
面向对象和面向过程详解 说到面向对象,我们都知道C#, Java, C++, python, JS- 都是面向对象的编程语言 说到面向过程,我们都知道C,fortran等都是面向过程的编程语言 今天我 ...
- Java面向对象和面向过程有什么区别?网友:傻傻分不清楚……
面向对象,Obeject Oriented,是一种编程术语.面向对象是当今软件开发方法的主流方法之一,他是把数据以及对数据的操作放在一起,作为一个相互依存的整体,就是我们所说的对象.对同类对象抽象出其 ...
- 通俗易懂地说明「面向对象」和「面向过程」的区别
一.面向对象是什么 面向对象 (Object Oriented,OO) 的思想对软件开发相当重要,它的概念和应用甚至已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布 ...
最新文章
- 推荐几个微信Markdown排版工具
- FSLib.Extension库
- 一个服务器上配置多个tomcat
- java string 类 上机_java上机试题
- mysql8.0导入备份_mysql8.0.20配合binlog2sql的配置和简单备份恢复的步骤详解
- linux学习查看系统资源和磁盘分区
- 指针c语言求电阻的并联值,计算电阻使之符合要求值,,“简单”的难题!!!...
- php安装redis扩展‘checking for igbinary includes... configure: error: Cannot find igbinary.h‘解决方法
- c++11 多线程 顺序执行_前阿里P8架构师总结的一些关于Java多线程的编程经验丨干货...
- 《Getting Started with WebRTC》第二章 WebRTC技术介绍
- rsync定时同步备份
- 家里计算机网络布局图,图解八种家庭网络常规布局优缺点
- 文件和文档的比较工具
- 边界路由linux,路由表构成简介(Destination/Gateway/Genmask/Iface)
- 羞涩!紧张!!兴奋!!!
- python正则匹配内网IP
- js的柯里化(curry)
- 做为软件测试的前辈,你能不能给我一点建议?
- Java之父——詹姆斯·高斯林
- 【Unity3D 灵巧小知识点】☀️ | Unity 四元数、欧拉角 与 方向向量 之间转换
热门文章
- python wxpython wx.grid动态增加行_wxPython控件学习之wx.FlexGridSizer
- 软考高级 真题 2015年上半年 信息系统项目管理师 案例分析
- Centos 编译安装wine(转)
- 三步修复低画质图片~
- php调用谷歌地图,在php mysql网站中使用谷歌地图api标记
- C/C++字符输入函数(详解)
- CoreException: Could not get the value for parameter
- 马航MH17航班坠毁:一家六口不幸遇难
- 【家庭推】日历苹果群发软件imessage查看docker消息
- 使用Python绘制多边形