在ES5中,我们就知道JS是不支持面向对象的,所以用函数模拟了一个构造函数来实现类的。那么在ES6中,在ES5的原理基础上,将代码书写更为简单,明了。

一、怎样用ES6创建类?首先看一看例子:

 class Student {
constructor(name, age) {
this.name = name;
this.age = age;
}
sleep(){console.log(`xx在xx睡觉`);
};
}
let s = new Student("ax", 23);
console.log(s);

这里出现了关键词“class”,之后的Student为类的标识符,使用大驼峰命名法。这是类模板。

constructor()是类中必须存在的构造函数,若没有书写则会默认有一个空构造。在小括号内是类的参数,只要觉得有必要写入的参数都可以写。这是构造器。

二、new:new关键字,调用类。调用类时发生了什么?(这是面试常考题)

1、创建一个空的新对象
var obj = {};
2、将该对象的_proto_(隐式原型)指向创建该对象的类的原型对象
假设类叫做A,obj._proto_ = A.prototype
3、将构造函数环境中的this,指向该对象,执行构造函数中的代码
this = obj;(代码错误,理解环境)
4、返回刚刚的创建的新对象

三、在类中,常用get—set属性,获取和设置属性值,是可控的手段

例子
class Circle {
constructor(left, top, r) {
this.createNode(); //在类中调用创建节点
this.left = left;
this.top = top;
this.r = r;
this.appendToPage(); //将节点放入页面
}
createNode() {
const div = document.createElement("div"); //创建节点,放入div变量
this.node = div; //类的节点为div
};
appendToPage() {
document.body.appendChild(this.node);
}
get left() {
return this.left + this.r;
}
set left(value) {
this.node.style.left = value - this.r + "px"; //将圆心设为点
}
get top() {
return this.top + this.r;
}
set top(value) {
this.node.style.top = value - this.r + "px";
}
get r() {
return this.noed.offsetWidth / 2 + "px";
}
set r(value) { }
}

创建一个圆圈类,其中的位置和半径都用get-set属性设置,他们为一对使用。get()为调用,set()为更改属性值(有参数)。当我们操作实例对象的get set属性时,就相当于在不断的调用对应的get—set方法。

四、类的三大特征

(1)封装

隐藏内部细节,不暴露在外面;即,信息的隐藏。不关心具体怎样实现的,只需要知道能达到效果就行了

(2)继承

子类继承父类的“所有”属性和方法,并且拥有自己的属性和方法
不能指向性继承

【extends 扩展】
从子类,扩展到父类,即继承父类

【super 超类】

继承父类,只能写在子类第一行中,并且只能写一次

class Person{
constructor(name,age,gender){
this.name = name;
this.age = age;
this.gender = gender;
}
}
class Student extends Person{//学生类 扩展 至人类=>即 继承
constructor(name,age,gender,grade){
super(name,age,gender)//超类(父类),调用父亲的构造,实现父亲构造的继承
this.grade = grade;//用继承省去部分重复的
}
}

(3)多态

相同的行为,不同的、多种的实现,传的参数不一样,决定了实现方法不一样。

【重载】

JS自带,参数的不同,实现不同。通过if判断参数表

【重写】

父亲的行为,儿子重写一个,覆盖父亲的

例子:

创建图形类,三角形类为图形类的儿子,使用extends继承;三角形类有父亲没有的特性,因此创建createNode方法重写。

class Graph {
constructor(color, left, top) {
this.color = color;
this.left = left;
this.top = top;
this.node = null; //没有创建图形时,图形节点为空,之后重新赋值
}
} //三角形
class Triangle extends Graph {//继承
constructor(color, left, top, bottom, height) {
super(color, left, top)
this.bottom = bottom;
this.height = height;
this.init();
}
createNode() { //oo重写
this.node = document.createElement("p");
// this.node.style.backgroundColor = this.color;
this.node.style.left = this.left + "px";
this.node.style.top = this.top + "px";
this.node.style.borderBottom = this.height + "px" + " solid " + this.color;
this.node.style.borderLeft = this.bottom / 2 + "px" + " solid transparent";
this.node.style.borderRight = this.bottom / 2 + "px" + " solid transparent";
}
}

以上就是ES6的类的创建和使用。

(ES6)JavaScript中面向对象类的实现的更多相关文章

  1. javascript中面向对象的5种写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. JavaScript中面向对象的三大特性(一个菜鸟的不正经日常)

    经过几天的学习,把jQuery给啃会了,但是运用的还不算特别熟练,总感觉自己在JavaScript方面的基础十分欠缺,所以继续拾起JavaScript,开始更好的编程之旅~ 今天学的是JavaScri ...

  3. Javascript中的类实现

    Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门 ...

  4. JavaScript中定义类的方式详解

    本文实例讲述了JavaScript中定义类的方式.分享给大家供大家参考,具体如下: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的exte ...

  5. JavaScript中创建类,赋值给ajax中的data参数

    缘由:因为要给根据是否选中checkbox来动态增加ajax中data的属性(ajax的data属性格式的几种方法,参考http://www.jb51.net/article/46676.htm) d ...

  6. JavaScript中的类

          JavaScript类的相关知识 1.例子 /* 例1 */// 定义一个构造函数function Range(from, to){ this.from = from; this.to = ...

  7. 《深入理解ES6》笔记—— JavaScript中的类class(9)

    ES5中的近类结构 ES5以及之前的版本,没有类的概念,但是聪明的JavaScript开发者,为了实现面向对象,创建了特殊的近类结构. ES5中创建类的方法:新建一个构造函数,定义一个方法并且赋值给构 ...

  8. (转载)JavaScript中面向对象那点事

    鉴于自己在JavaScript这方面比较薄弱,所以就找了一本书恶补了一下(被称为犀利书的JavaScript权威指南).书的内容虽然多了点,但这也充分说明了js中的东西还是挺多的.虽然我们的定位不是前 ...

  9. JavaScript中面向对象那点事

    鉴于自己在JavaScript这方面比較薄弱.所以就找了一本书恶补了一下(被称为犀利书的JavaScript权威指南).书的内容尽管多了点,但这也充分说明了js中的东西还是挺多的.尽管我们的定位不是前 ...

随机推荐

  1. Java方法参数:

    一个方法不能修改一个基本数据类型的参数 一个方法可以改变一个对象参数的状态 一个方法不能实现让对象参数引用一个新的对象 案例1: 一个方法不能修改一个基本数据类型的参数 String a = &quo ...

  2. elasticsearch基础知识杂记

    日常工作中用到的ES相关基础知识和总结.不足之处请指正,会持续更新. 1.集群的健康状况为 yellow 则表示全部主分片都正常运行(集群可以正常服务所有请求),但是 副本 分片没有全部处在正常状态. ...

  3. requests库结合selenium库共同完成web自动化和爬虫工作

    我们日常工作中,单纯的HTTP请求,程序员都倾向于使用万能的python Requests库.但大多数场景下,我们的需求页面不是纯静态网页,网页加载过程中伴随有大量的JS文件参与页面的整个渲染过程,且 ...

  4. eclipse中如何配置tomcat

    1.打开eclipse上面的Windows选项,选择Preferences==>Server==>Runtime Environments==>Add 2.选择你电脑中安装的tomc ...

  5. [梁山好汉说IT] 边缘计算在梁山的应用

    [梁山好汉说IT] 边缘计算在梁山的应用 0x00 摘要 梁山泊下四个酒店就是边缘计算在梁山的应用,以朱贵南山酒店为例能看出其"计算实时/省流量/具备智能"等各种优点. 0x01 ...

  6. final阶段20191121-5 Scrum立会报告+燃尽图 01

    此作业要求参见:http://edu.cnblogs.com/campus/nenu/2019fall/homework/10065 一: 组名:组长组 组长:杨天宇 组员:魏新  罗杨美慧   王歆 ...

  7. $exLucas$学习笔记

    本来不打算写了的,,,但是感$jio$理解起来还是有点儿难度的来着,,,$so$还是瞎写点儿趴$QAQ$ $exLucas$主要有三步: 1)唯一分解$mod$并预处理$p^{k}$以内的阶乘 2)计 ...

  8. 1066 图像过滤 (15分)C语言

    图像过滤是把图像中不重要的像素都染成背景色,使得重要部分被凸显出来.现给定一幅黑白图像,要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换. 输入格式: 输入在第一行给出一幅图像的分辨 ...

  9. Cent OS防火墙配置端口开放

    CentOS 6内置的防火墙为iptables,Cent OS7,内置的防火墙则是firewalld iptables 防火墙设置 1.打开/关闭/重启防火墙 #开启防火墙(重启后永久生效): chk ...

  10. 小小知识点(十五)——origin pro 2018 安装和消除demo字样

    安装 1.安装过成中选择语言为中文或者英文,安装完成后可在注册表中切换语言. 2.安装过程中使用序列号 中文版:DF2W8-9089-7991320英文版:GF3S4-9089-7991320 3.安 ...