ES6中的类与ES5中的类的区别

ES6中的类的特别之处


前言

我在牛客的面经上经常看到面试官问ES6中的类和ES5中的类有什么不同?我查看了不少人给出的答案,但我觉得他们的答案都不是很全,而且一些核心的点都没有提到,故在此写下我的理解,希望能帮助大家,o( ̄▽ ̄)ブ!


ES6的类与ES5的类的区别

首先我要强调的是javascript中并不存在类,ES6引入类只是为了让那些习惯使用java,C++这些语言的开发者更容易使用javascript。ES6中的class只是一个语法糖,它本质上还是基于原型来实现的。下面进入正题。Are you Ready?

1. 类名不可以重复声明

ES6中的类与ES5中的类的区别_第1张图片

可以看到错误提示说foo已经被声明了,其实在babel编译(尽管babel编译后的代码不一定和原来的等价)foo是通过let声明的,它大概是以下的形式:

    "use strict";
    //... 
    let Foo = (function() {
   
      function Foo() {
   
        // ... 初始化
      }

      //...   做某些事情

      return Foo;
    })()

而在ES5中由于类名是可以重复声明的,这个类名只是被添加入了Object Enviroment Record中(可能有些人不知道Object Enviroment Record<

你可能感兴趣的:(javascript,js,javascript,es6)