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中静态属性的定义:

  1. 先创建类
  2. 在类的外部定义静态属性
类名.静态属性名 = 属性

ES7中静态属性的定义:

  1. 在类定义时,使用static关键字定义静态属性
static 静态属性名 = 属性

静态方法

静态的方法(函数):只能通过类名访问,不能通过对象名访问。

static 函数名(参数)
{
	函数体语句
}

类名.方法名()

以上是关于JavaScript面向对象的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段12——JavaScript的Promise对象

VSCode自定义代码片段12——JavaScript的Promise对象

常用Javascript代码片段集锦

JavaScript单行代码,也就是代码片段

javascript 仿面向对象编程实例代码(私有,公共变量。。。)

JavaScript对象原型链继承闭包