当前位置: 首页 > news >正文

ES6的面向对象编程以及ES6中的类和对象

一、面向对象

1、面向对象

(1)是一种开发思想,并不是具体的一种技术

(2)一切事物均为对象,在项目中主要是对象的分工协作

2、对象的特征

(1)对象是属性和行为的结合体

(2)属性:体现对象的静态特征、

(3)行为:体现对象的动态特征(具体体现为函数/方法)

3、面向对象的三大特征

(1)封装性:对象时属性和行为的封装体

(2)继承性:在基类(父类)中已经定义的属性或行为,子类可以继承使用

(3)多态性:同一个信息传递给不同的对象呈现的效果也是不同的

二、ES6中的类和对象

1、类:在ES6中引入类的概念,使用class关键字进行定义

class 类名{

        属性

        方法

}

2、ES6中类和对象的关系

(1)类是对象的抽象:类抽取了对象的公共部分

(2)对象是类的实例化:对象是类的具体实例

3、ES6中类的构造函数

使用constructor作为类的构造函数,用于初始化对象。在定义类的时候若没有显式的定义constructor,js会自动生成一个无参的构造函数(constructor(){}) 

 class Student{constructor(id,name,age,sex){   //constructor用来初始化对象的属性this.id = id,this.name = name,this.age = age,this.sex = sex}show(){console.log(`学号:${this.id} 姓名:${this.name} 年龄:${this.age} 性别:${this.sex}`);}
}
let stu1 = new Student('001','小王',20,'男');
console.log(stu1);
stu1.show();

 

 注:通过类创建对象,new 类名([参数])

(1)创建对象时不能显式调用constructor,在new 类名()创建对象时,默认调用了constructor

(2)在定义类时若没有写constructor,则js会自动生成无参的constructor

三、ES6中类的继承

1、基类:被继承的类,也可称为父类或超类

2、子类:由基类派生的类,又称为派生类

3、继承的用法:通过extends关键字实现

class 父类名{

        构造方法

        普通方法

}

class 子类名 extends 父类名{

        构造方法

        普通方法

}

4、super关键字:代表是父类,在类的继承过程中访问父类的构造函数、普通函数

class Father{constructor(name,sex){this.name= name,this.sex = sex}display(){console.log(`姓名:${this.name} 性别:${this.sex}`);}
}class Son extends Father{constructor(name,sex,address,phone){super(name,sex),this.address = address,this.phone = phone}show(){console.log(`姓名:${this.name} 性别:${this.sex} 地址:${this.address} 电话:${this.phone}`);}
}let son1 = new Son('小黑','男','西安','13198302930')
son1.show();

5、子类的普通方法与父类的普通方法同名时,子类方法覆盖父类的方法

类中的普通方法又称为实例方法或成员方法

        class Animal{eat(food){console.log(`${food}`);}sleep(){console.log('在睡觉');}}class Rabbit extends Animal{eat(){super.eat('兔子吃草')}}class Tiger extends Animal{eat(){super.eat('老虎吃肉')}}let rabbit = new Rabbit()rabbit.eat();rabbit.sleep();let tiger = new Tiger();tiger.eat();tiger.sleep();

http://www.lryc.cn/news/157452.html

相关文章:

  • ConfigMaps in K8s
  • 《机器人学一(Robotics(1))》_台大林沛群 第 6 周 【轨迹规划_直线转折处抛物线平滑】Quiz 6
  • 关于vscode的GitLens插件里的FILE HISTORY理解
  • 通过idea实现springboot集成mybatys
  • 力扣(LeetCode)算法_C++——移位字符串分组
  • Vue2 与Vue3的区别?面试题
  • java代码:Random和Scanner应用的小例子-猜数字小游戏
  • python调用git出错:ImportError: Failed to initialize: Bad git executable.
  • 【C语言】入门——指针
  • C#_预处理指令
  • 容器命令(docker)
  • Vue3 ElementPlus el-cascader级联选择器动态加载数据
  • leetcode分类刷题:栈(Stack)(一、字符串相邻元素删除类型)
  • 你还在找淘宝商品信息查询的接口吗?
  • dll修复精灵,dll修复工具下载方法分享,mfc140u.dll缺失损坏一键修复
  • [LINUX使用] iptables tcpdump
  • 百度文心一率先言向全社会开放 应用商店搜“文心一言”可直接下载
  • 【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理
  • 【vue】使用无障碍工具条(详细)
  • java实现命令模式
  • 【PowerQuery】PowerQuery学习路径
  • JDK7多线程并发环境HashMap死循环infinite loop,CPU拉满100%,Java
  • Linux下的系统编程——认识进程(七)
  • 2023年9月CSPM-3国标项目管理中级认证报名,找弘博创新
  • 使用ChatGLMTokenizer处理json格式数据
  • Redis基础特性及应用练习-php
  • Numpy知识点回顾与学习
  • H.264视频编码推荐的分辨率和码率配置表
  • Greenplum 实用工具-gpaddmirrors
  • 详解 Cent OS JDK 8.0 安装配置