js之ES6的Class类
JavaScript ES6之前的还没有Class类的概念,生成实例对象的传统方法是通过构造函数。
例如:
1 function Mold(a,b){ 2 this.a=a; 3 this.b=b; 4 } 5 Mold.prototype.count=function(){ 6 return this.a+this.b; 7 }; 8 let sum=new Mold(1,2); 9 console.log(sum.count()) //3
这中写法跟传统的面向对象语言差异较大,写起来也比较繁杂。
-
ES6提供了更加接近其他语言的写法,引入了Class(类)的概念,作为对象的模板,可以通过class关键字,定义类(类似python、java等);
当然ES6的大部分功能再ES5都能实现,ES6的class
可以看作是一个语法糖,只是新的class
定义类的写法让对象原型的写法更加简单明了、更接近与面向对象的编程思想。与上面ES5写的类使用ES6实现,例如:
1 class Mold{ 2 constructor(a,b){ 3 this.a=a; 4 this.b=b; 5 } 6 count(){ 7 return this.a+this.b; 8 } 9 } 10 let sum=new Mold(1,2); 11 console.log(sum.count()) //3
这里ES6的类,只需用
class
定义,并且类的方法不需要用function定义;还有ES6的constructor
方法,代表这该类的构造方法;并且它的this
关键字指向着实例对象。这里ES5的构造函数Mold,相当于ES6Mold类的constructor
方法。
-
constructor
-
- ES6实例对象的构造函数就是该类本身;并且当我们new 类名()就是执行了constructor这个函数。
例如:
1 class Mold{ 2 constructor(){ 3 console.log("aaa") 4 } 5 } 6 let m=new Mold();// aaa 7 console.log(m.constructor===Mold);//true
上面代码Mold类的constructor,实例化对象时执行默认constructor
;
-
- 任何对象都有构造函数,并且构造函数与当前对象的类是相同;
例如:
1 let arr=new Array(); 2 console.log(arr.constructor===Array);//true 3 let str=new String(); 4 console.log(str.constructor===String);//true 5 let obj=new Object(); 6 console.log(obj.constructor===Object);//true
2. 类的继承 extends
-
-
继承父类后,子类会继承父类所有的方法和属性(包括静态方法和属性)
-
如果子类没有定义
constructor
方法,会默认被添加该方法 -
任何子类都有
constructor
方法;
-
例如:
1 //class 类名 extends 被继承的类{} 2 Class Father{ 3 constructor(){ 4 } 5 sum(){ 6 console.log("abc"); 7 } 8 static fn(){ 9 console.log("hello") 10 } 11 } 12 Class Son extends Father{ 13 14 } 15 let s=new Son(); 16 s.sum()//abc,继承了父类的sum()方法 17 Son.fn()//hello 继承了父类的静态方法fn()
-
- 继承后的子类方法的三种处理:
完全继承,不需要重写这个方法,子类执行继承方法内容与父类相同
重写覆盖,只需要在这个类中重写这个方法就可以覆盖继承过来的内容
加工,子类可以用
super
调用父类的方法或属性进行加工,再加上子类自己的方法和属性
3. super
-
-
调用父类的构造函数直接使用
super()
,并且可以传参; -
子类的构造函数中,只有调用了
super
之后才可以使用this
关键字,否则会报错;
-
例如:
1 //super.父类函数(); 2 class Father{ 3 constructor(){ 4 console.log("bbb"); 5 } 6 } 7 class Son extends Father{ 8 constructor(x){ 9 this.x=x;//ReferenceError,报错 10 super(); 11 this.x=x;//正确 12 } 13 } 14 let sum=new Son();//bbb
4. 类的static静态
-
-
在属性或方法前面使用
static
定义类的静态属性和方法; -
所有的静态属性和静态方法都不能通过实例化的对象调用;
-
需要通过类来调用,静态属性和静态方法是类的专属属性和方法,和实例化对象无关,比如数组和数学方法中的:
Array.from();Math.random()。
-
例如:
1 class Mold{ 2 static x=0; 3 y=1; 4 static fn1(){ 5 console.log("aaa") 6 } 7 fn2(){ 8 console.log("bbb"); 9 } 10 } 11 let m=new Mold(); 12 console.log(m.x,m.y);//undefined , 1 13 m.fn1(); // TypeError 14 m.fn2(); // bbb 15 //需要通过类来调用 16 Mold.fn1(); //aaa 17 console.log(Mold.x);//0
-
- 静态的使用场景:
一般静态的方法是用来解决一系列该类型的方法;
解决具体类型的方法,不是解决某个具体对象的方法
静态属性,一般用于存储该类型的一系列通用的属性变量
这种存储,在类创建的时候就已经变成全局的了,可在任何地方调用,并且不会被自动销毁
原文地址:https://www.cnblogs.com/cpfblogs/p/12687712.html
- HelloWorld,我的第一趟旅程出发点
- Android OpenGL开发实践 - GLSurfaceView对摄像头数据的再处理
- 走进科学:对七夕“超级病毒”XX神器的逆向分析
- 机器学习 - 朴素贝叶斯分类器的意见和文本挖掘
- 认知指纹:颠覆性的身份认证技术
- 跟我学姿势:极客教你如何科学的看电影
- Discuz 5.x/6.x/7.x投票SQL注入分析
- 论如何高效的挖掘漏洞
- Rxjava + retrofit + dagger2 + mvp搭建Android框架
- 走进科学:如何正确的隐藏自己的行踪
- 比特儿(Bter.com) 比特币交易平台被盗事件全解析
- BitTorrent Bleep:无法被监控的聊天软件
- QQ蠕虫的行为检测方法
- 趋势OfficeScan系列产品漏洞分析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python如何进入交互模式
- PHP静态方法和静态属性及常量属性的区别与介绍
- 详解PHP变量传值赋值和引用赋值变量销毁
- Keras 利用sklearn的ROC-AUC建立评价函数详解
- PHP如何防止XSS攻击与XSS攻击原理的讲解
- 如何验证python安装成功
- python三引号如何输入
- Python定义一个函数的方法
- keras 模型参数,模型保存,中间结果输出操作
- python判断是空的实例分享
- keras绘制acc和loss曲线图实例
- 基于Python实现2种反转链表方法代码实例
- Python smtp邮件发送模块用法教程
- Python3基于print打印带颜色字符串
- Python StringIO及BytesIO包使用方法解析