《class》

Class 基本用法

格式

 // 1.聲明形式
      class Person {
        constructor() {}
        speak() {}
      }
      // 2.表達(dá)式形式
      const Person = class {
        constructor() {
          console.log('constructor');
        }
        speak() {}
      };
      new Person();

1、類名首字母一般大寫
2、實(shí)例化時(shí)執(zhí)行構(gòu)造方法,所以必須有構(gòu)造方法contructor,但可以不寫出來(lái)
3、this 代表實(shí)例對(duì)象,上面定義的是實(shí)例屬性/方法
4、一般在構(gòu)造方法中定義屬性,方法不在構(gòu)造方法中定義

Class的屬性和方法

(1)實(shí)例屬性 方法就是值為函數(shù)的特殊屬性。

 class Person {
          // 屬性是添加到實(shí)例對(duì)象上的
            age = 0;
            sex = 'male';
            // 添加到類的原型對(duì)象上
            getSex = function() {
                return this.sex;
            };
            constructor(name, sex) {
              // 添加到實(shí)例對(duì)象上
                this.name = name;
                this.sex = sex;
            }
        }
        const p = new Person('Alex', 'male');

(2)靜態(tài)方法 添加到類本身上
使用static關(guān)鍵字

 class Person {
            static getSex = function() {
                return this.sex;
            };
            constructor(name) {
                this.name = name;
            }
        }
        const p = new Person('Alex');

直接在類上添加

 class Person {
            constructor(name) {
                this.name = name;
            }
        }
        Person.getSex = function() {
          return this.sex;
        }
        const p = new Person('Alex');

(3)靜態(tài)屬性 與靜態(tài)方法使用方式一致
(4)私有屬性和方法 : 一般情況下,類的屬性和方法都是公開(kāi)的 ,公有的屬性和方法可以被外界修改,造成意想不到的錯(cuò)誤
1、_ 開(kāi)頭表示私有
2、將私有屬性和方法移出類

Class的繼承

(1)使用exends關(guān)鍵字實(shí)現(xiàn)繼承,同名屬性子類覆蓋父類

class Person {
        constructor(name, sex) {
          this.name = name;
          this.sex = sex;
          this.say = function () {
            console.log('say');
          };
        }
        speak() {
          console.log('speak');
        }
        static speak() {
          console.log('static speak');
        }
      }
      Person.version = '1.0';
      class Programmer extends Person {
        constructor(name, sex) {
          super(name, sex);
        }
      }

(1)關(guān)于super
1、super前方不可以有this操作,例如:


image.png

2、作為函數(shù)調(diào)用


image.png

3、作為函數(shù)使用時(shí),super只能用在子類的構(gòu)造方法中
super雖然代表了父類的構(gòu)造方法,但是內(nèi)部的this指向子類的實(shí)例

4、在構(gòu)造方法中使用或一般方法中使用super

super 代表父類的原型對(duì)象 Person.prototype
所以定義在父類實(shí)例上的方法或?qū)傩?,是無(wú)法通過(guò) super 調(diào)用的
通過(guò) super 調(diào)用父類的方法時(shí),方法內(nèi)部的 this 指向當(dāng)前的子類實(shí)例

// class Person {
      //   constructor(name) {
      //     this.name = name;

      //     console.log(this);
      //   }
      //   speak() {
      //     console.log('speak');
      //     // console.log(this);
      //   }
      //   static speak() {
      //     console.log('Person speak');
      //     console.log(this);
      //   }
      // }
      // class Programmer extends Person {
      //   constructor(name, sex) {
      //     super(name, sex);
      //     // console.log(super.name);
      //     // super.speak();
      //   }
      //   // hi() {
      //   //   super(); // ×
      //   // }
      //   speak() {
      //     super.speak();
      //     console.log('Programmer speak');
      //   }

5、在靜態(tài)方法中使用super
指向父類,而不是父類的原型對(duì)象
通過(guò) super 調(diào)用父類的方法時(shí),方法內(nèi)部的 this 指向當(dāng)前的子類,而不是子類的實(shí)例

6、注意事項(xiàng)
使用 super 的時(shí)候,必須顯式指定是作為函數(shù)還是作為對(duì)象使用,否則會(huì)報(bào)錯(cuò)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容