ES6——静态属性与静态方法

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

 

posted @ 2020-09-15 00:14  是桂  阅读(4040)  评论(0编辑  收藏  举报