关于typescript中的static修饰符

很多人说熟悉js的童鞋学习ts更容易上手,其实把我觉得学过任何一门强语言的童鞋更容易上手。因为你很容易发现ts有很多和java/c++(等强语言)相似的语法。

什么修饰符public / private / protect / static / abstract 啊。。。

个人感觉和java里面的是一个意思!扯远了。。。

1: static 静态,顾名思义就是只属于我自己的,类自己的,不需要实例化即可引用。我是这样理解的。

举个简单的例子吧

一个类下面的方法或者变量,你想调用是不是要new一下变成实例才可以用?

如果是static,那么经过它修饰的变量还是方法都可以直接通过类引用了。看下面代码

class Test {

  myName: string = "lle";

  changeName(): void {

    this.myName= "change name"

  }

}

Test.changeName();  ----------->>>>>>>>>> ❌❌❌ 很明显是不可以的

class Test {

  static changeName(): void {

    console.log("=========>>>", "hello");

  }

}

Test.changeName();  ------------->>>>>>>>>> ✔️✔️✔️这样就是OK的

2:不能通过new出来的实例访问类的静态变量或方法,看下边例子代码

class Test {

  static myName: string = "lle";

  static changeName(): void {

    Test.myName = "change name";

  }

}

let instance = new Test();

instance.changName();  ----------->>>>>>>>>> ❌❌❌ 不可以

console.log("=========>>>",instance.myName); ----------->>>>> ❌❌❌ 不可以

class Test {

  static myName: string = "lle";

  static changeName(): void {

    Test.myName = "change name";

  }

}

Test.changeName();  ------------->>>>>>> ✔️✔️✔️这样就是OK的

console.log("=========>>>", Test.myName);  ------------->>>>>>> ✔️✔️✔️OK的

3: 类中访问自己的静态属性,不能用this,只能用类名。看下边代码

class Test {

  static myName: string = "lle";

  changeName(): void {

    this.myName = "change name";  ----------->>>>>>>>>> ❌❌❌ 不可以

  }

}

class Test {

  static myName: string = "lle";

  changeName(): void {

    Test.myName = "change name"; ----------->>>>> ❌❌❌ 不可以

  }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。