面向过程

思维方式:把解决问题的关注点,放到解决问题的每一个详细步骤上面。

面向对象

思维方式:把解决问题的关注点,放到解决问题需要的一些对象身上。

创建对象:

  1. 对象字面量
  2. 使用内置构造对象
  3. 封装简单的工厂函数
  4. 自定义构造函数

构造函数

  1. 定义:构造函数也是函数,通常用来初始化对象,并且和new关键字同时出现。
  2. 书写:构造函数名,首字母要大写,以示区分。
  3. 实例化:通过构造函数创建对象的过程,就叫做实例化。
  4. 实例:通过构造函数实例化出来的对象就是该构造函数的一个实例。

构造函数执行过程:

  1. 使用new关键字创建对象;
  2. 调用构造函数,把新创建出来的对象赋值给构造函数内的this;
  3. 在构造函数内使用this为新创建出来的对象新增成员(属性和方法);
  4. 默认返回新创建的这个对象(普通的函数,如果不写return语句,会返回undefined)。

构造函数的返回值:

  1. 如果不写返回值,默认返回的是新创建出来的对象(一般都不会写return语句);
  2. 如果自己写return语句,return的是空值(return;),或者是基本类型的值或者null,都默认返回新创建出来的对象;
  3. 如果返回的是object类型的值,将不会返回刚才新创建的对象,取而代之的是return后面的值。

构造函数注意事项:

  1. 如果像正常的函数一样使用构造函数,构造函数中的this将不再指向新创建出来的对象(因为根本就没有创建对象);
  2. 构造函数中的this这时指向的是window全局对象,当时用this给对象添加成员的时候,全部都添加到了window上。

原型

  1. 在构造函数创建出来的时候,系统会默认地帮构造函数创建并关联一个神秘的对象,这个对象就是原型。原型默认的是一个空的对象。
  2. 作用:原型中的属性和方法,可以被使用该构造函数创建出来的对象使用。
  3. 如何访问构造函数的原型:构造函数.prototype;
  4. 注意:prototype是构造函数的属性,跟对象没有关系;
  5. 如何给原型对象添加属性和方法:使用对象的动态特性;
  6. 使用对象访问属性和方法:会首先在自己内部进行查找,如果找到了,就直接使用;如果没有找到,就去原型中查找,查找到之后使用;如果原型中还没有,如果是属性,返回undefined,如果是方法,就报错。
  7. 使用原型解决构造函数存在的问题:构造函数原型对象中的成员,可以被该构造函数创建出来的所有对象访问,并且所有的对象共享该对象;所以可以将构造函数中需要创建的函数,放到原型对象中存储,这样就解决了传统构造函数中全局变量污染的问题以及代码结构混乱的问题。
  8. 当你修改构造函数的原型的时候,你已经创建出来的对象的原型是不会随之改变的。

对象

js中的对象:键值对的组合就是对象。

面向对象是对面向过程的封装,有了面向对象,并不意味着可以抛弃面向过程。

属性值存的是一个地址。

编写代码时的原则:DRY(Don't repeat yourself)

封装

1. 使用函数封装:代码的复用性提高。

函数封装带来的问题:全局变量污染;代码结构不清晰,维护不方便。

2. 使用对象封装的优势:暴露在全局的只有一个对象名,不会造成全局变量污染;使用对象将代码进行功能模块的划分,有利于日后的维护。

JS:面向对象编程,带你认识封装,继承和多态

javascript 面向过程和面向对象的更多相关文章

  1. JS是面向过程、面向对象还是基于对象?面向对象的代码体现

    一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法 ...

  2. 面向过程 vs 面向对象

    从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...

  3. python 面向过程和面向对象比较

    面向过程 VS 面向对象 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度 ...

  4. C++笔记005:用面向过程和面向对象方法求解圆形面积

    原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 结束了第一个hello world程序后,我们来用面向过程和面向对象两个方法来求解圆的面积这个问题,以能够更清晰的体会面向对象和面向过程. ...

  5. PHP面向过程和面向对象

    php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: ...

  6. essential C++中关于面向过程和面向对象的说明

    昨天在阅读essential C++中看到了一个关于面向过程和面向对象的区别的例子,感觉挺好的.记录下来.... 这个例子是关于照相机的.照相机有三个性质,一个是控制位置:通常使用3个浮点数据来表示其 ...

  7. python基础(23):面向过程与面向对象的优劣、初识面向对象

    1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程 ...

  8. C语言学习系列(二)面向过程和面向对象

    一.基本定义 (一).面向过程(procedure oriented programming POP) 面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可. ...

  9. PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理

    相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析  PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...

随机推荐

  1. python 中的集合set

    python中,集合(set)是一个无序排列,可哈希, 支持集合关系测试,不支持索引和切片操作,没有特定语法格式, 只能通过工厂函数创建.集合里不会出现两个相同的元素, 所以集合常用来对字符串或元组或 ...

  2. PHP使用Redis实现消息队列

    消息队列可以使用MySQL来实现,可以参考博客PHP使用MySQL实现消息队列,虽然用MySQL可以实现,但是一般不这么用,因为MySQL的数据都存在硬盘中,而从硬盘中对MySQL的操作,I/O花费的 ...

  3. “using NoSQL” under MySQL

    https://dev.mysql.com/doc/refman/5.7/en/document-store.html https://dev.mysql.com/doc/refman/5.7/en/ ...

  4. HTTP协议整理

    一.概念 1.HTTP协议:即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和Web服务器之间互相通信的规则,它允许将超文本标记语言(HTML)文档从 ...

  5. DTW的原理及matlab实现(转载+整理)

    在大部分的学科中,时间序列是数据的一种常见表示形式.对于时间序列处理来说,一个普遍的任务就是比较两个序列的相似性. 在时间序列中,需要比较相似性的两段时间序列的长度可能并不相等,在语音识别领域表现为不 ...

  6. 关于flask 上直接使用py.test测试框架进行测试

    这个周末基本上都在研究这玩意儿中度过了,虽然效率不高,英文文档看得晕头转向,但是好歹弄出来了 有个结果测试也通过了现在粗略总结一下有时间补上更多详细的例子. 首先使用py.test测试框架,可以做最简 ...

  7. python之Map函数

    # map()函数使用举例 # 功能:map()接受一个函数f和一个或多个list,将f依次作用在list的每个元素,得到一个新的列表 # 语法:map(方法名,列表,[列表2]) # 注意:map( ...

  8. codeforces620A

    Professor GukiZ's Robot CodeForces - 620A 机器人很好玩 一开始在(x1,y1) 最后在(x2,y2) 每秒钟内横坐标最多变化1(也可以不变化)纵坐标也是 问最 ...

  9. Django-website 程序案例系列-14 缓存的应用配置文件的写法

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...

  10. Java若不为空则取其值的lambda表达式

      原本的写法是: Map<String, Object> map = new HashMap<>(); String text = ""; if(map. ...