靜態方法只能寫在class內,constructor外。通過static關鍵字聲明
靜態屬性只能寫在class外,通過 類名.屬性名 = 屬性值 聲明
//靜態屬性與靜態方法(ES6明確規定,Class內部只有靜態方法,沒有靜態屬性 ) //1.不會被類實例所擁有的屬性與方法,只是類自身擁有 //2.只能通過類調用 //通過static關鍵字聲明一個靜態方法 class Car{ constructor(){ Car.totalCar += 1; this.speed = 0; } speedUp(){ this.speed += 1; } static repair(car){ if(!car.speed){ car.speed = 0; } console.log(car); } } //靜態方法只能通過類去訪問,不能通過實例去訪問的 Car.repair({ color:'#f00' }); //靜態方法跟普通方法可以重名 //靜態屬性只能通過 類名.屬性名 = 屬性值; //靜態屬性可以增加一些配置項等等 Car.totalCar = 0; //記錄生成了多少個Car對象 //直接掛在類上面,跟程序的耦合性降低 Car.config = { wheel:4, color:'#000' } //直接方法靜態屬性: 類名.屬性名 new Car() console.log(Car.totalCar);
應用:
//靜態屬性經常這樣使用,把各個類相關的內容全部掛到靜態屬性上面,方便取值 class Profession{ } class Character{ constructor(pfs){ this.pfs = pfs; } } Character.config = { profession:{ '咒術師':1, '弓箭手':2 } } new Character(Character.config.profession['咒術師']) //靜態方法的應用:一般會提供一個公共的類相關的方法 //比如把一個程序員類轉換成一個普通人的類 class Person{ static format(programmer){ programmer.haveGirlFriend = true; programmer.hair = true; } } class Programmer{ constructor(){ this.haveGirlFriend = false; this.hair = false; } } const programmer = new Programmer(); console.log(programmer); Person.format(programmer); console.log(programmer);