前端面试题 ES5-ES6 function-class实现类的区别记录详解

在ES5中,我们是通过function来实现类和类的继承,而在ES6中,我们多了class这个语法糖,除了看起来更像一个类外,在很多方面class做到了比function更加严格

1. 写法上

在ES5中,我们是通过prototype和Object.create()来实现类和继承

function Person(){
   }
function Student(){
   }
Student.prototype = new Person()

而在ES6中,我们使用class语法,通过extends来实现类和继承,但实际原理还是通过原型链实现的

class Person{
   }
class Student extends Person{
   }

2. 提升上的区别

在ES5中的function是可以提升的,如下代码是没问题的

var foo = new Foo()
function Foo(){
   
    this.foo = 42
}

在JavaScript引擎扫描代码发现变量声明的时候,如果遇到变量声明的时候,如果是为var或者没有声明符直接使用赋值,又或者是使用function的时候,就会提升到作用域顶部,而如果遇到let,const时,会将变量声明放到暂时性死区TDZ中,如果访问TDZ中的变量就会导致错误,直到我们执行到这句声明的时候,才会将其从TDZ中拿出来

而class和let,const一样,所以在下面两种情况中会报错

var foo = new Foo()
class Foo{
   
    constructor(){
   
        this.foo = 42
    }
}
// Uncaught ReferenceError: Foo is not defined
function Foo(){
   
    this.foo = 42
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值