静态方法只能写在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);