讲class的文章
讲生成器和迭代器的文章
- class
class只是prototype的语法糖, 其中的函数都是挂在prototype下的.
class后面的大括号里面的代码段和函数里面大括号的代码段有所不同. 主要是class里面的函数定义不需要加function关键字.
class中特殊成员:
constructor()
构造函数. 给实例初始化用的. 如 class C{constructor(name){this.name = name}}; let c = new C('John')
. 对于只是初始化变量,有简写的方式,就是直接在class最开始赋值且不能加let/var. 如class C{name='Mike';}
static
静态函数/变量修饰符. 静态的函数/变量不属于this, 只能通过class名引用. 如class C{static x = 0; f(){console.log(C.x)} }
name
class是从function继承的, 所以function有一个name
属性, class也有(static的)name属性. function x(){}; x.name==='x'
, class C{}; C.name==='C'
#
私有函数/变量前缀. 在函数或者变量前面加#
就变成了私有的. 有意思, 这种用法跟linux在文件或目录前面加.
就变成了隐藏的一样. 访问的时候也要加上#
才行. 如class C{static #x = 0; f(){console.log(C.#x)}}
. 符号加的多就更像天书了哈哈(这个是ES2022特性)
extends
继承(扩展)父类. 如class C{}; class D extends C{};
super()
子类constructor()中调用父类constructor(). 不是可用可不用, 而是子类有constructor就必须用, 而且必须先用, 也就是在子类构造函数一开始就调用: constructor(){super(); this.x = 'xx'}
. 否则在new 子类的时候会报错ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
标签: none 阅读量: 620