热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

面向对象编程,你真正懂吗?

JavaScript面向对象面向对象的两大编程思想面向过程面向过程很好理解,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现ÿ

Javascript 面向对象
面向对象的两大编程思想
面向过程

面向过程很好理解,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了

面向对象

上大学时老师教过我们,万物皆对象。面向对象就是把事务分解成为一个个对象,然后由对象之间分工与合作。

举个例子

一个人盖个狗窝,直接弄泥,砖头,修饰一下就成了

但是盖高楼的话,需要打地基,需要运输材料,需要财务结算等,此时不需要等,各做各的,效率才高

面向对象三大特性
就拿拖拉机来说

封装性【已经把耕地功能准备好,负责开就行】
继承性【继承与拖拉机,会开拖拉机就会弄这个,继承自拖拉机】
多态性【可以装配不同的机械,除了耕地还可以拉货】
面向过程和面向对象的优缺点
面向过程

优点:性能比面向对象高,步骤练习紧密
缺点:不好维护,不易多次使用及扩展
面向对象

优点:易维护,可复用,可扩展,灵活性高
缺点性能没有面向过程高
ES6中的类和对象
类class
在ES6中新增加了类的概念,可以使用class关键字声明一个类,之后以这个类来实例化对象。【构造函数实例化对象】

类抽象了对象的公共部分,它泛指某一大类(class) ES5:没有类,ES6:类

ES:ECMAscript

类是在ES6中新加进入的,学会区分类和对象的概念

类:泛指一类

对象:类中的具体的某个实例,【属性和方法的集合体】

类:抽象

类模拟抽象的,泛指的,对象是具体的

面向对象模拟现实世界,更贴近实际生活,生活照分为抽象事物和具体事物

比如:手机【两层含义:具体某个手机,和笼统的概念手机】

抽取,把对象的属性和行为封装成一个类

对类进行实例化, 获取类的对象

例如:人有身高,体重等,但是具体的某个人也有这个属性 练习了解类和对象

在这里插入图片描述

一个对象可以继承多个类,而类就是一个泛指

对象:具体

对象:类中的具体的某个实例【属性和方法的集合体】

现实生活中:万物皆对象,对象是一个具体的事物,看得见摸得着的实物。例如,一本书、一辆汽车、一个人可以是对象

在Javascript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。

var n = 3;
var arr = [1,2,3];
function fn () {}
var str= 'abcd';
'a.jpg'>

对象是由属性和方法组成的

属性:对象有什么【访问】【语法:对象.属性】

方法:对象做什么【执行】【语法:对象.方法()】

属性:事物的特征,在对象中用属性来表示(常用名词)

方法:事物的行为,在对象中用方法来表示(常用动词)

面向对象的思维特点

抽取(抽象)对象共用的属性和方法组织(封装)成一个类(模板)

对类进行实例化, 获取类的对象

类里面的属性和方法,其实是把对象的公共属性和公共方法放到了一起

创建类
语法:class 类名 {属性和方法}【构造函数语法糖】

注意类名首字母大写

类要抽取公共属性方法,定义一个类

class Star {};var ldh = new Star();

类就是构造函数的语法糖

constructor 构造函数
语法

class Star {constructor (uname,age) {this.uname = uname;this.age = age;}
}

属性:放到constructor,构造函数里面

注意:类里面的方法不带function,直接写既可

类里面要有属性方法,属性方法要是想放到类里面,我们用constructor构造器

构造函数作用:接收参数,返回实例对象,new的时候主动执行,主要放一些公共的属性

constructor() 方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法。

注意:每个类里面一定有构造函数,如果没有显示定义, 类内部会自动给我们创建一个constructor() ,

注意:this代表当前实力化对象,谁new就代表谁

类添加方法
语法:注意方法和方法之间不能加逗号

class Star {constructor () {}sing () {}tiao () {}
}

class 类名 { constructor(){} 方法名(){} }

注意:类中定义属性,调用方法都得用this

注意:方法之间不能加逗号分隔,同时方法不需要添加function 关键字

总结:类有对象的公共属性和方法,用class创建,class里面包含constructor和方法,我们把公共属性放到constructor里面,把公共方法直接往后写既可,但是注意不要加逗号

类的继承
extends 关键字
语法:

class Father {}
class Son extends Father{}

注意:是子类继承父类

super关键字
我们应用的过程中会遇到父类子类都有的属性,此时,没必要再写一次,可以直接调用父类的方法就可以了

super关键字用于访问和调用对象父类上的函数。可以调用父类的构造函数,也可以调用父类的普通函数

当子类没有constructor的时候可以随意用父类的,但是如果子类也含有的话,constructor会返回实例,this的指向不同,不可以再直接使用父类的东西

调用父类构造函数

class F {constructor(name, age){}
}class S extends F {constructor (name, age) {super(name,age);}
}

注意: 子类在构造函数中使用super, 必须放到this 前面(必须先调用父类的构造方法,在使用子类构造方法

调用父类普通函数

class F {constructor(name, age) {}say () {}
}class S extends F {constructor (name, age) {super(name,age);}say () {super.say()}
}

注意:如果子类也有相同的方法,优先指向子类,就近原则

总结:super调用父类的属性和方法,那么查找属性和方法的原则就近原则

如果子类不写东西,那么直接继承父类就可以用

但是如果子类有自己的构造函数和父类同名的方法,此时不可以直接用父类的东西,需要用super调用父类的方法和构造函数

三个注意点
在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象.
类里面的共有属性和方法一定要加this使用
类里面的this指向问题
constructor 里面的this指向实例对象, 方法里面的this 指向这个方法的调用者
例子

class Button {constructor () {var btn = document.querySelector('input');btn.onclick = this.cli;}cli () {console.log('点击了');}
}var anniu = new Button();

类里面的this指向
构造函数的this指向实例对象

普通函数的this是调用者,谁调用this是谁

例子

"button" value="点击">
var that;
class F {constructor (name, age) {this.name = name;this.age = age;// console.log(this);that = this; this.btn = document.querySelector('input');this.btn.onclick = this.cli;}cli () {console.log(this);}say () {console.log(this);}
}var obj = new F('张学友',22);

最后
如果你觉得此文对你有一丁点帮助,点个赞。或者可以加入我的开发交流群:1025263163相互学习,我们会有专业的技术答疑解惑

如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star:http://github.crmeb.net/u/defu不胜感激 !

完整源码下载地址:https://market.cloud.tencent.com/products/33396

PHP学习手册:https://doc.crmeb.com
技术交流论坛:https://q.crmeb.com


推荐阅读
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 热血合击脚本辅助工具及随机数生成器源码分享
    本文分享了一个热血合击脚本辅助工具及随机数生成器源码。游戏脚本能够实现类似真实玩家的操作,但信息量有限且操作不可控。热血合击脚本辅助工具可以帮助玩家自动刷图、换图拉怪等操作,并提供了雷电云手机的扩展服务。此外,还介绍了使用mt_rand函数作为随机数生成器的代码示例。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
momosu1028_738_636
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有