TS-修饰符 与 static
1.static: 用于 修饰 变量 或者方法,表示 静态的
- 当类 中 的 方法 被 声明 为 static 时,其实例化 对象 不可 调用 该方法,只有 类 本身 ,以及 其子类 可以 调用。
eg:
class A {
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
this.age = age;
}
eat(){
console.log('测试');
}
static eat2(){
console.log('测试2');
}
}
let a = new A('zhangsan',8);
a.eat();// '测试'
a.eat2();// error
A.eat2();// '测试2'
class B extends A {
constructor(name:string,age:number){
super(name,age);
}
}
let b = new B('lisi',9);
b.eat();// '测试'
b.eat2();// error
B.eat2();// '测试2'
2.public: 修饰 属性 和 方法 公共的,任何地方 都可以访问
- 不写修饰符 默认 就是 public
3.private: 修饰 属性 和 方法 私有的 , 只能在 本类 内部使用,其余地方 均不可以 访问 实例化对象 和 类 也不可 访问。(子类也不行)
*eg:
class A {
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
this.age = age;
}
private eat(){
console.log('测试');
}
eat2(){
this.eat(); // '测试'
}
}
var a = new A('zhangsan',8);
a.eat(); // error
A.eat(); // error
4.protected: 修饰 属性 和 方法 被 保护的, 被类 内部 以及 其 子类 内部 非 static 方法 内 可 访问,实例化 对象 和 类 也不可访问
class A {
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
this.age = age;
}
protected eat(){
console.log('测试');
}
eat2(){
this.eat(); // '测试'
}
private eat3(){
this.eat(); // '测试'
}
static eat4(){
this.eat(); // error
}
}
var a = new A('zhangsan',8);
a.eat(); // error
A.eat(); // error
class B extends A {
constructor(name:string,age:number){
super(name,age);
}
eat5(){
this.eat(); // '测试'
}
private eat6(){
this.eat(); // '测试'
}
protected eat7(){
this.eat(); // '测试'
}
static eat8(){
this.eat(); // eror
}
}
let b = new B('李四',9);
b.eat(); //error
B.eat(); // error