JavaScript面向对象
Posted 遥岑.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript面向对象相关的知识,希望对你有一定的参考价值。
目录
面向对象
面向对象概述
面向过程:面向过程就是分析出解决问题需要的步骤,然后用函数将这些步骤一个个实现,使用的时候依次调用,面向过程的核心是过程。
面向对象:面向对象就是把需要解决的问题分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述每个对象在解决问题中的行为,面向对象的核心是对象。
面向对象的优势
- 模块化更深,封装性强
- 更容易实现复杂的业务逻辑
- 更易维护、易复用、易扩展
面向对象的三大特征
- 封装性:对象是属性和行为的结合体
- 多态性:同一消息被不同的对象接收后,会产生不同的效果
- 继承性:子类可以继承父类的信息
面向过程和面向对象
思想
面向过程编程(POP):
分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用。
面向过程,就是按照分析好了的步骤,按照步骤解决问题。
面向对象编程(OOP):
面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。
面向对象是以对象功能来划分问题,而不是步骤。
对比
面向过程:
优点:性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程。
缺点:没有面向对象易维护、易复用、易扩展。
面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
缺点:性能比面向过程低。
类(ES6)
类:具有相同属性和行为的对象的集合(类是对象的抽象)。
对象:是类的实例(是类的具体化)。
class关键字
class关键字:用来定义一个类,在类中可以定义constructor( )构造方法,用来初始化对象的成员。
在 ES6 中新增加了类的概念,可以使用 class 关键字声明一个类,之后以这个类来实例化对象。
class 类名
{
属性
函数
}
- 类名是一个用户标识符,建议首字母大写
- 类必须使用 new 实例化对象
ES6:ES是ECMAScript的简写,它是javascript的语法规范。ES6是在ES5基础上扩展,增加了如面向对象编程的相关技术
构造函数
构造函数:在ES6中使用 constructor( ) 来定义构造函数,作用是初始化对象的属性(成员变量)。
在ES6中使用constructor( ) 方法,是类的构造函数(默认方法),作用是初始化对象的属性用于接受传递的参数,同时返回实例对象,通过 new 命令生成对象实例时,自动调用该方法。
class 类名
{
constructor(参数)
{
语句
}
}
- 构造函数不是必须的
- 若用户没有定义构造函数,系统会生成一个默认的、无参的构造函数
构造函数和类的区别:
类中的成员方法是定义在类中的,使用类创建对象后,这些对象的方法都是引用了同一个方法,这样可以节省内存空间
普通成员函数
函数名(参数)
{
函数体语句
}
变量名 = function(参数)
{
函数体语句
}
- constructor里面的this指向实例对象,方法里面的this指向这个方法的调用者
- 类里面的共有属性和方法一定要加this使用
ES5中的构造函数(类)
function 构造函数名(参数)
{
函数体语句
}
- 构造函数名就是类名,即构造函数名与类名相同,构造函数只能通过new运算符调用
- 构造函数方法存在浪费内存的问题
继承
继承
在JavaScript中,继承用来表示两个类之间的关系,子类可以继承父类的一些属性和方法,在继承以后还可以增加自己独有的属性和方法。
class 子类名 extends 父类名
{
函数体语句
}
- 父类必须已经定义,父类又称为基类或超类
- 子类又称为派生类,可以继承父类的属性和函数
super关键字
super关键字:代表当前类的父类,用于访问和调用对象在父类上的方法,可以调用父类的构造方法,也可以调用父类的普通方法。
- 调用父类的构造函数:在子类的构造函数中使用super调用父类的构造函数,则调用语句必须作为子类构造函数的第一条语句,super(参数)
- 子类不能继承父类的构造函数
- 调用普通函数:super.函数名(参数)
- 方法覆盖:若子类中定义的函数与父类中的函数同名时,子类的函数就覆盖了父类中函数
静态成员和实例成员
实例成员:通过实例对象访问的成员称为实例成员。
静态成员:是通过类名或构造函数访问的成员。
区别:
- 实例成员属于具体的对象,而静态成员为所有对象共享
- 实例成员是通过对象名访问,静态成员是通过类名访问
静态属性
ES6中静态属性的定义:
- 先创建类
- 在类的外部定义静态属性
类名.静态属性名 = 属性
ES7中静态属性的定义:
- 在类定义时,使用static关键字定义静态属性
static 静态属性名 = 属性
静态方法
静态的方法(函数):只能通过类名访问,不能通过对象名访问。
static 函数名(参数)
{
函数体语句
}
类名.方法名()
以上是关于JavaScript面向对象的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段12——JavaScript的Promise对象
VSCode自定义代码片段12——JavaScript的Promise对象