ES6 Class

ES6引入了Class作为对象模板,具有constructor、实例、静态方法、继承等特性。Class内部方法默认严格模式,不存在变量提升,name属性返回类名,支持Generator方法,this指向类的实例。通过extends关键字实现继承,super关键字在不同场景下有不同的作用。同时,类的prototype属性和proto属性形成两条继承链。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6引入了Class类的概念,作为对象的模板,通过class关键字,可以定义类;基本上,ES6的class可以看作只是一个语法糖

constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法;一个类必须有contructor方法,如果没有显示定义,一个空的constructor方法会被默认添加

类的实例

与ES5一样,类的所有实例共享一个原型对象

可以通过实例的__proto__属性为类添加方法

 可以通过Object.getProptotypeOf()方法来获取实例对象的原型,然后再来为原型添加方法或属性

取值函数getter和存值函数setter

 

-----静态方法

类相当于实例的原型,所有在类中定义的方法,都会被实例继承;如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”

如果静态方法包含this关键字,这个this指向的是类,而不是实例

----extends

Class可以通过extends关键字来实现继承

ES5的继承,实质上是先创造子类的实例对象this,然后再将父类的方法添加到this上面;

ES6的继承,实质上是先将父类实例对象的属性和方法,加到this上面,然后再用子类的构造函数修改this;在子类的构造函数中,只有调用super之后,才可以使用this关键字,否则会报错;这是因为子类实例的构建,基于父类实例,只有super方法才能调用父类实例

 -----Object.getPrototypeOf()

可以用来从子类上获取父类,用来判断一个类是否继承了另一个类

----super关键字

super这个关键字,既可以当作函数使用,也可以当作对象使用

super作为函数调用时,代表父类的构造函数 

super作为对象时,在普通方法中,指向父类的原型对象;在静态方法中,指向父类

由于对象总是继承其他对象的,所以可以在任意一个对象中,使用super关键字

----类的prototype属性和proto属性

在大多数浏览器的ES5实现之中,每一个对象都有__proto__属性,指向对应的构造函数的prototype属性;Class作为构造函数的语法糖,同时有prototype属性和__proto__属性,因此同时存在两条继承链

1.子类的__proto__属性,表示构造函数的继承,总是指向父类

2.子类prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性

----实例的proto属性

子类实例的__proto__属性的__proto__属性,指向父类实例的__proto__属性,即子类的原型的原型,是父类的原型

 

注意点:

1.严格模式  类和模块的内部,默认就是严格模式,所以不需要使用use strict指定运行模式

2.不存在提升  类不存在变量提升

3.name属性  由于本质上,ES6的类只是ES5的构造函数的一层包装,所以函数的许多特性都被Class继承,包括name属性;name属性总是返回紧跟在class关键字后面的类名

4.Generator方法  如果某个方法之前加上星号* 就表示该方法是一个Generator函数

5.this指向  类的方法内部如果含有this,它默认指向类的实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值