ES6 class的基本语法-学习笔记
Posted Lulin1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6 class的基本语法-学习笔记相关的知识,希望对你有一定的参考价值。
1、基本上,ES6 的class
可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class
写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
类的内部所有定义的方法,都是不可枚举的(non-enumerable)。这一点与 ES5 的行为不一致。
2、类和模块的内部,默认就是严格模式,所以不需要使用use strict
指定运行模式。只要你的代码写在类或模块之中,就只有严格模式可用。 --考虑到未来所有的代码,其实都是运行在模块之中,所以 ES6 实际上把整个语言升级到了严格模式。
3、一个类必须有constructor
方法,如果没有显式定义,一个空的constructor
方法会被默认添加。
constructor
方法默认返回实例对象(即this
),完全可以指定返回另外一个对象。
class Foo { constructor() { return Object.create(null); } } new Foo() instanceof Foo
类必须使用new
调用,否则会报错。这是它跟普通构造函数的一个主要区别,后者不用new
也可以执行。
class Foo { constructor() { return Object.create(null); } } Foo() // TypeError: Class constructor Foo cannot be invoked without ‘new‘
4、与 ES5 一样,实例的属性除非显式定义在其本身(即定义在this
对象上),否则都是定义在原型上(即定义在class
上)。
与 ES5 一样,类的所有实例共享一个原型对象。
var p1 = new Point(2,3); var p2 = new Point(3,2); p1.__proto__ === p2.__proto__ //true
5、与函数一样,类也可以使用表达式的形式定义。
6、类不存在变量提升(hoist),这一点与 ES5 完全不同。
new Foo(); // ReferenceError class Foo {}
上面代码中,Foo
类使用在前,定义在后,这样会报错,因为 ES6 不会把类的声明提升到代码头部。这种规定的原因与下文要提到的继承有关,必须保证子类在父类之后定义。
7、私有方法是常见需求,但 ES6 不提供,只能通过变通方法模拟实现。有一种方法是利用Symbol
值的唯一性,将私有方法的名字命名为一个Symbol
值。
8、与私有方法一样,ES6 不支持私有属性。目前,有一个提案,为class
加了私有属性。方法是在属性名之前,使用#
表示。
以上是关于ES6 class的基本语法-学习笔记的主要内容,如果未能解决你的问题,请参考以下文章