-
面向对象概念
-
面向对象是一种以对象为中心的编程思想。面向对象是相对于面向过程来讲的,面向对象把相关的数据 和方法组织为一个整体来看待,从更高的层次来进行系统建模。
-
面向过程
-
面向过程思想强调的是步骤,当碰见问题时,思考的是“我该怎么做”,分析出解决问题所需要的步骤, 一步步的去实现。 例如:想吃蛋炒饭,首先想到的是我要如何做,包括哪些步骤。比如:起锅烧油,加入鸡蛋,加入米 饭,加入调料,翻炒,装盘等。
-
-
面向对象
-
面向对象思想强调的是对象,当碰见问题时,思考的是“我该让谁来做”。这个“谁”其实就是对象。找合适 的对象做合适的事情。而对象如何去做(采用什么样的步骤)我们就不关心了,最终把问题解决掉就可以 了。 例如:还是想吃蛋炒饭,首先想到的是让谁来帮我做蛋炒饭,比如找厨师来帮我做蛋炒饭。具体厨师如 何去做这个蛋炒饭,做饭的步骤是怎么样的我们并不关心。只要最终把蛋炒饭做好就可以了。
-
遇到问题找对象,有对象就用对象,没有对象就创建对象来解决问题
-
-
-
-
ES6创建对象
-
在ES6中 我们通过类来创建对象 类其实是总和了 构造函数 和 原型
-
写法:
//编写类 class 类名{ 属性名 = 属性值 方法名 = 函数 ... } //通过类创建对象 let 变量名 = new 类名()
- 注意:属性会直接添加给实例对象 方法 则添加给原型对象
-
在ES6中 类是专门用来创建对象的 相当于对象的模板
-
在ES6中 对象和类的关系是 类是对象的模板 对象是类的实例
-
-
ES6中 通过类 创建 需要传参的对象
//在需要传参的时候 如果想让类 能够接收参数 需要单独编写类的构造器 constructor //写法如下 class 类名{ constructor(形参1,形参2,...){ this.属性名1 = 形参1; this.属性名2 = 形参2; ... this.方法名 = function(){} } } //通过类创建对象 let 变量名 = new 类名(实参1,实参2,...)
- 注意:构造器中的this 指向实例对象 所以 构造器就是通过this 再给实例对象 添加属性和方法
-
注意:通过构造器添加的属性和方法 都是直接绑定在实例对象自身上的
-
-
ES6中 给类设置静态属性和方法
-
ES6中的类 存在一些特殊的属性和方法——静态属性 和 静态方法
-
这类方法和属性 只能由 类来使用 而不是 由实例对象来使用
-
写法如下
class 类名{ 属性名 = 属性值 方法名 = function(){} static 属性名1 = 属性值;//静态属性 static 方法名1 = function(){};//静态方法 }
ES6中 类的继承
-
直接继承
-
:在es6中 如果子类 想 继承父类的属性和方法 可以通过一个关键字——extends
-
写法:
//现在有一个现成的父类 class Parent{ name = "张三"; age = 18; say = function(){ console.log(this.name); } } //现在有一个子类 想继承父类中的属性和方法 class 子类 extends 父类{} class Child extends Parent{ }
-
继承带参数的父类
-
:如果父类本身 需要传参 子类在继承的时候 除了使用extends关键字之外 还需要 使用一个函数——super
-
写法如下
//现在有一个现成的父类 class Parent{ constructor(gender){ this.gender = gender }, name = "张三"; age = 18; say = function(){ console.log(this.name); } } //现在有一个子类 想继承父类中的所有属性 但是父类中gender属性需要传参 class 子类 extends 要继承的父类{ constructor(gender1){ //在子类的constructor构造器的最开头 要先调用super方法 继承父类构造器中的属性和方法,并将实参 传入super函数中 通过super函数 将实参 传给父类 super(gender1); } } let obj = new 子类("男")
- 注意:super的调用 必须写在子类构造器的最开头
-
说明:其实 调用super函数 相当于 调用继承的父类的构造器
-
-
super详解
-
super函数
-
super函数 可以帮助我们 继承到需要传参的父类中构造器中的属性和方法
-
-
super对象
-
super对象 则可以在子类中 帮助我们获取父类中的属性和方法(不包括普通属性)
class Parent{ 属性名 = 属性值//普通属性 方法名 = function(){}//普通方法 static 属性名1 = 属性值;//静态属性 static 方法名1 = function(){};//静态方法 } class Child extends Parenr{ //我们在子类中 可以通过super对象 使用父类中的普通方法 静态方法 和 静态属性 唯独不能使用 普通属性 static 静态方法名(){ console.log(super.父类静态属性名); super.父类静态方法名() } 普通方法(){ super.父类普通方法名() } }
- 注意:子类中如果想使用父类的静态属性和静态方法 需要 用在 自己的静态方法中
-
注意:子类中如果想使用父类的普通方法 也需要在普通方法中使用
-
-
-
-
-
总结
-
面向对象 在实际开发中 用的不多 我们实际开发中 用的更多的是 面向过程思想
-
面向对象更多的使用在 框架的开发中,例如
数组的方法 Array.of Array.from 数组.find 数组.findIndex class Array1 { static of(){}; static from(){}; find(参数){ }; findIndex(){ } }
-