目录

一.面向对象简介

二.类(构造函数的语法糖)

1.传统的构造函数的问题

2.类的特点

三.类的其他书写方式

1.可计算的成员名

2.getter和setter

3.静态成员

4.字段初始化器

5.类表达式


一.面向对象简介

面向对象是一种思想,和具体的语言一样,与面向过程对比如下:

  • 面向过程:思考的切入点是功能的步骤

  • 面向对象:思考的切入点是对象的划分

【例1】分别用面向对象和面向过程来描述把大象装冰箱的步骤

面向过程

//1.把冰箱门打开
function openFrige() {}
openFrige();
//2.把大象装进去
function ElephantIn() {}
ElephantIn();
//3.把冰箱门关上
function closeFrige() {}
closeFrige();

面向对象

//1.创建一个大象类
function Elephant() {}
//2.创建一个冰箱类
function Frige() {}
//3.在冰箱类上添加开门的方法
Frige.prototype.openDoor = function () {}
//4.在冰箱类上添加关门的方法
Frige.prototype.closeDoor = function () {}
//5.在冰箱类上添加装东西的方法
Frige.prototype.join = function (things) {this.openDoor();//装东西的操作this.closeDoor;
}
var frig = new Frige();
frig.join(new Elephant());

二.类(构造函数的语法糖)

1.传统的构造函数的问题

(1)属性和原型方法定义分离,降低了可读性

(2)原型成员可以被枚举

(3)默认情况下,构造函数仍然可以被当作普通函数使用

【例2-1】

function Animal(type, name, sex, age) {this.type = type;this.name = name;this.sex = sex;this.age = age;
}
Animal.prototype.print = function () {console.log(`种类:${this.type}`);console.log(`姓名:${this.name}`);console.log(`性别:${this.sex}`);console.log(`年龄:${this.age}`);
}
const a = new Animal('狗', '旺财', '公', '3');
a.print();
for (const prop in a) {console.log(prop)
}

【结果】

图2-1

2.类的特点

(1)类声明不会被提升,与let和const一样,存在暂时性死区

(2)类中的所有代码均在严格模式执行

(3)类的所有方法都是不可枚举的

(4)类的所有方法都无法被当作构造函数使用

(5)类的构造器必须使用new来调用

【例2-2】

class Animal {constructor(type, name, age, sex) {this.type = type;this.name = name;this.age = age;this.sex = sex;}print() {console.log(`种类:${this.type}`);console.log(`姓名:${this.name}`);console.log(`年龄:${this.age}`);console.log(`性别:${this.sex}`);}
}
const a = new Animal('狗', '旺财', '公', '3');
a.print();
for (const prop in a) {console.log(prop);
}

【结果】

图2-2

三.类的其他书写方式

1.可计算的成员名

【例3-1】

const printName = 'print';
class Animal {constructor(type, name, age, sex) {this.type = type;this.name = name;this.age = age;this.sex = sex;}[printName]() {console.log(`【种类】:${this.type}`);console.log(`【名字】:${this.name}`);console.log(`【年龄】:${this.age}`);console.log(`【性别】:${this.sex}`);}
}
const a = new Animal("狗", "旺财", 3, "男");
a[printName]();

2.getter和setter

Object.defineProperty可以定义某个对象成员属性的读取和设置

使用getter和setter控制的属性,不在原型上

【例3-2】

const printName = 'print';
class Animal {constructor(type, name, age, sex) {this.type = type;this.name = name;this.age = age;this.sex = sex;}//创建一个age属性,并给它加上getter,读取该属性时,会运行该函数get age() {return this._age + '岁';}//创建一个age属性,并给它加上setter,给该属性赋值时,回运行该函数set age(age) {if (typeof age !== "number") {throw new Error('age property must be a number');}if (age<0) {age = 0;} else if(age>1000){age = 1000;}this._age = age;}[printName]() {console.log(`【种类】:${this.type}`);console.log(`【名字】:${this.name}`);console.log(`【年龄】:${this.age}`);console.log(`【性别】:${this.sex}`);}
}
const a = new Animal("狗", "旺财", -1, "公");
a[printName]();
const a1 = new Animal("乌龟", "拓拓", 1001, "公");
a1[printName]();

【结果】

图3-2

3.静态成员

静态成员指构造函数本身的成员,ES6中使用static关键字定义的成员即为静态成员

【例3-3】

class Chess {constructor(name){this.name = name;}static width = 50;static method() {console.log(`I'm a chess`);}
}
const chess = new Chess('车');
console.log(chess);
console.log(Chess.width);
Chess.method()

【结果】

图3-3

4.字段初始化器

(1)使用static的字段初始化器,添加的是静态成员

(2)没有使用static的字段初始化器,添加的成员位于对象上

(3)箭头函数在字段初始化器位置上,指向当前对象

【例4-1-1】

class Test {static a = 1;b = 2;c = 3;constructor() {this.d = this.b + this.c;}
}
const t = new Test();
console.log(t);

【结果】

图4-1-1

【例4-1-2】

class Test {constructor() {this.a = 123;}print = () => {console.log(this.a);}
}
const t1 = new Test();
const t2 = new Test();
console.log(t1.print === t2.print);

【结果】打印false

5.类表达式

【例5】

//匿名类,类表达式
const A = class {a = 1;b = 2;
}
const a = new A()

ES6对象(2):面向对象与类相关推荐

  1. 5.对象和面向对象3——类的定义

    为什么80%的码农都做不了架构师?>>>    Python 是完全面向对象的:你可以定义自已的类,从自已的或内置的类继承,然后从你定义的类创建实例. 在 Python 中定义类很简 ...

  2. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  3. Day16:面向对象编程——类和对象

    一.面向对象的程序设计 在此之前用到的事面向过程的程序设计,它的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比设计好一条流水线,考虑周全什么时候处理什么东西. 优点:极大的降低 ...

  4. PHP 面向对象:类和对象

    2019独角兽企业重金招聘Python工程师标准>>> 从OOP的视角看,不应区分语言.无论是C++.无论是Java.无论是.net还有更多面向对象的语言,只要你了解了OO的真谛,便 ...

  5. python面向对象(part1)--类和对象

    学习笔记 开发工具:Spyder 文章目录 概述 面向过程 面向对象 类和对象 举个例子 语法 定义类 创建对象(实例化) 实例成员 实例变量(对象的变量) 实例方法(对象的方法) 类成员 类变量 类 ...

  6. python中面向对象空间时间_python基础学习Day15 面向对象、类名称空间、对象名称空间 (2)...

    一.类 先看一段代码: classPerson: animal= '高级动物'walk_way= '直立行走' # 静态属性,静态变量,静态字段language= '语言' def __init__( ...

  7. C# 类与对象(面向对象的编程)

    面向对象编程 相关概念 1. this关键字 2. 重载构造函数 3. 内存回收与析构函数 4. 对象初始化器 5. 数据抽象与封装 6. readonly实例变量 代码例程 例子1:对象初始化器使用 ...

  8. python的类和对象_Python面向对象之类和对象实例详解

    本文实例讲述了Python面向对象之类和对象.分享给大家供大家参考,具体如下: 类和对象(1) 对象是什么? 对象=属性(静态)+方法(动态): 属性一般是一个个变量:方法是一个个函数: #类的属性 ...

  9. 面向对象的类、方法和对象

    面向对象 第一章 你要学的重点知识点 类和对象 构建方法 访问权限 继承 多态(最重要) 抽象和借口 内存分析 其他知识点不是不重要,相对而言,最重要的是上面这几个 第二章 类和对象 画图纸 定义车的 ...

  10. 面向对象概念及对象、抽象、类的解释

    具有相同或相似性质的一组对象的抽象就是类,类是对一类事物的描述,是抽象的.概念上的意义: 对象是实际存在的该类事物的每个个体,因此也称为实例: 对象的抽象是类,类的具体化就是对象,也可以说类的实例就是 ...

最新文章

  1. 混合云备份利用自定义Workflow保护MySQL的实践
  2. bash特性之六(bash的快捷键)
  3. java如何获得点的横纵坐标_横纵坐标怎么区分
  4. Redis Cluster集群架构实现
  5. 白盒测试基本路径生成工具_基于基本最短路径列生成的车辆路径问题
  6. 全国计算机等级考试题库二级C操作题100套(第68套)
  7. matlab title多个标题_MATLAB中的直方图处理及均衡化
  8. 一个人成为废材的9大原因
  9. createprocess重启程序_win32取CreateProcess启动程序的返回值
  10. 最大流问题 Edmonds-Karp算法
  11. 【机器学习基础】正规方程法(Normal equation)(正则化和非正则化)——吴恩达课程笔记
  12. Windows10 开机跳过密码验证
  13. 画 ArcFace 中的 margin 曲线
  14. 已知函数comp的C语言,在C ++ STL中设置value_comp()函数
  15. SketchUp2016如何安装插件
  16. AWS Route53里使用Godady注册的域名
  17. cad旋转命令_CAD中根据角度画圆弧的方法有哪些?【AutoCAD教程】
  18. 上一页 1 2 3 ... 10 下一页 固定分页
  19. 人工智能生成 logo 神器
  20. [转]Android入门基础教程

热门文章

  1. Python平衡点问题
  2. 可算是有文章,把Linux零拷贝讲透彻了!
  3. 压箱底总结:流系统端到端一致性对比
  4. Kafka端到端审计
  5. 【推荐】技术人必看的音视频学习资源清单
  6. 腾讯云安全专家 Killer 告诉你,企业上云怎么做更安全
  7. 腾讯TAPD发布2018企业敏捷协作数据报告
  8. Vue008_ Vue实例生命周期
  9. java基础---二维数组方面的一些小编程
  10. leetcode 767. Reorganize String | 767. 重构字符串(贪心+分桶+26路归并)