public
定义为公有属性,类的内部,子类,外部都可以访问,默认为 public
外部访问必须使用new关键字
class A {
public text: string = "公有属性public"
getText() {
return this.text
}
}
const a = new A()
console.log(a.getText()) // 公有属性public
console.log(a.text) // 公有属性public
private
定义为私有属性,只能在类的内部访问,子类,外部访问会报错。
class A {
private text: string = "私有属性private"
constructor(text:any){
this.text=text
}
getText() {
return this.text
}
}
class B extends A {
constructor(text:any) {
super(text)
}
addtext(){
console.log(this.text)// 语法检查报错 子类不可访问父类的private
}
}
const a = new A('a')
const b = new B('b')
console.log(a.text) // 语法检查报错 外部不可访问private
console.log(a.getText()) // 正常打印 通过方法转一下就可以访问到了,不算外部直接访问了
console.log(b.getText()) // 正常打印 通过方法转一下就可以访问到了,不算外部直接访问了
protected
定义为保护属性,可以在类,子类的内部可以访问,外部访问会报错。
class A {
protected text: string = "保护属性正常打印"
constructor(text:any){
this.text=text
}
getText() {
return this.text
}
}
class B extends A {
constructor(text:any) {
super(text)
}
addtext(){
console.log(this.text)// 正常打印 子类可以访问父类的protected
}
}
const a = new A('a')
const b = new B('b')
console.log(a.text) // 语法检查报错 外部不可访问protected
console.log(a.getText()) //正常打印 通过方法转一下就可以访问到了,不算外部直接访问了
console.log(b.getText()) //正常打印 通过方法转一下就可以访问到了,不算外部直接访问了
b.addtext()// 正常打印 通过方法转一下就可以访问到了,不算外部直接访问了
static
定义为静态属性,函数内部只能在静态方法中使用,函数外可以直接以(函数名.属性名)的形式访问
class A {
public text1: string = "公有属性public"
protected text2: string = "保护属性protected"
private text3: string = "私有属性private"
static text4: string = "静态属性static"
public getText2() {
console.log(this.text1,this.text2,this.text3,this.text4)//text4编译报错,其他正常打印
}
protected getText3() {
console.log(this.text1,this.text2,this.text3,this.text4)//text4编译报错,其他正常打印
}
private getText4() {
console.log(this.text1,this.text2,this.text3,this.text4)//text4编译报错,其他正常打印
}
static getText1() {
console.log(this.text1,this.text2,this.text3,this.text4)//text4正常打印,其他编译报错
}
}