当前位置: 首页 > Web前端 > HTML5

es5中的class和es6中的class的区别

时间:2023-04-05 11:08:58 HTML5

在es5中,主要通过构造函数和原型来定义一个类。在es6中,我们可以通过class来定义一个类。今天就来梳理一下他们的分歧。关于es5中类的定义方式,可以看一下这个Js'class'。这里主要说一下es5类和es6类的区别。1、class类必须new调用,不能直接执行。如果执行class类会报错,但是es5中的class和普通函数没有本质区别,执行肯定没问题。2.类类别没有变量提升。图2报错,说明类方法没有将类的定义提升到最顶层。3.类class不能遍历其实例原型链上的属性和方法`)}letfoo=newFoo()for(letkeyinfoo){//like原型上也打印了console.log(key)//color,like}classFoo{constructor(color){this.color=color}like(){console.log(`like${this.color}`)}}letfoo=newFoo('red')for(letkeyinfoo){//只打印一种颜色,没有在原型链上打印像console.log(key)//color}4.new.target属性ES6为newcommand引入了new.target属性,它会返回newcommand作用的构造函数。如果没有被new或Reflect.construct()调用,new.target将返回undefinedfunctionPerson(name){if(new.target===Person){this.name=name;}else{thrownewError('你必须使用new命令生成一个实例');}}letobj={}Person.call(obj,'red')//这时候如果使用非new的调用方式会报错5.类类有static静态方法staticstaticmethods只能通过类调用,不会出现在实例上;另外,如果静态方法中包含this关键字,则this指的是类,而不是实例。声明为静态的静态属性和方法可以被子类继承。classFoo{staticbar(){this.baz();//这里指的是类}staticbaz(){console.log('hello');//不会出现在实例中}baz(){console.log('world');}}Foo.bar()//你好