静态成员

382 阅读2分钟

static

class Sta {
    static num: number = 1;
    static setNum = () => {
        this.num++;
    };
    static getNum = () => {
        console.log('静态:',this.num);
        
    }
}

  1. 静态成员可以通过类名调用
  2. 静态方法调用静态属性,里面的this只能拿到静态成员
  3. 静态和原型相互独立,不能调用对方
  4. static 无法约束静态属性指向别的地址,只能约束别人指向它
static sta1 = new Sta()
  1. 一个静态方法修改了静态属性a,其他静态方法或者外部任何地方访问a都会是最新的值
Sta.setNum()
Sta.getNum()--2
console.log(Sta.num);
Sta.setNum()
Sta.getNum()--3
console.log(Sta.num);

因为静态是放在Function实例上的(这个到后面写继承的时候会说),公共放在原型上 对象属性的私有性导致其存储空间私有,所以不会影响其他

  1. ts类中的静态成员存储在内存的静态区,运行ts类首先为静态成员分配内存空间,静态成员的内存空间分配时间早于对象空间的分配时间。 无论是否创建对象,创建多少对象,是否调用该静态方法或属性,ts都会为静态成员分配空间,---》静态成员和对象无关 一旦为静态成员分配好空间,就会一直保存在此处直到重启或着控制台结束。

  2. ts中不能new 类里面的方法,ts类可以访问原型对象属性,但无法添加方法,只能覆盖原有的方法。【js可以】原因:防止回到es5那种非2面向对象的情况

  3. 静态方法的成员和原型对象成员的区别: 原型对象上的所有方法和属性时用来提供给类的的所有对象变量公用的方法或属性 静态成员属于类,可以用类直接访问