讲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

添加新评论