码迷,mamicode.com
首页 > 其他好文 > 详细

typescript 公共,私有与受保护的修饰符

时间:2019-07-20 09:24:12      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:代码   this   png   vat   person   目的   image   protected   ring   

public理解

当你在程序中没有指明修饰符时,默认为public,也就是在类内类外都可以访问,我们以下面的例子来解释。

class Person{
    name:string
    sex:string
    age:number // 默认设置为public
    constructor(name:string, sex:string, age:number){
        this.name = name
        this.sex = sex
        this.age = age
    }
    show_name():void{
        console.log('类内函数输出的:', this.name)
    }
}

let lcs = new Person('lcs', 'man', 21)

console.log('类外输出的:', lcs.name)
lcs.show_name()

技术图片

private理解

在类内定义这个变量时,我们可以定义为private,他就不可以在类外进行访问,例子如下:

class Person{
    private name:string // 这里将name改为了private
    sex:string
    age:number
    constructor(name:string, sex:string, age:number){
        this.name = name
        this.sex = sex
        this.age = age
    }
    show_name():void{
        console.log('类内函数输出的:', this.name)
    }
}

class Teacher extends Person{
    salary: number
    constructor(name:string, sex:string,  age:number,salary:number){
        super(name,sex,age)
        this.salary = salary
    }
    show():void{
        console.log('继承类内输出的:', this.name, this.salary.toString())
    }
}

let lcs = new Person('lcs', 'man', 21)
let t = new Teacher('lcs', 'man',21,31232)
t.show()
console.log('类外输出的:', lcs.name)
lcs.show_name()

在编译的时候编译器报错

技术图片

编译器指出,name变量时private,只能在类Person内使用,在继承类类外都是可以访问的,但是这个时候在浏览器内还是可以正常运行的,报错的目的是为了让你规范代码

技术图片

protected理解

定义为protected之后的变量只能在类内和继承类内进行访问,在类外访问就会报错

class Person{
    protected name:string // 将name改为protected
    sex:string
    age:number
    constructor(name:string, sex:string, age:number){
        this.name = name
        this.sex = sex
        this.age = age
    }
    show_name():void{
        console.log('类内函数输出的:', this.name)
    }
}

class Teacher extends Person{
    salary: number
    constructor(name:string, sex:string,  age:number,salary:number){
        super(name,sex,age)
        this.salary = salary
    }
    show():void{
        console.log('继承类内输出的:', this.name, this.salary.toString())
    }
}

let lcs = new Person('lcs', 'man', 21)
let t = new Teacher('lcs', 'man',21,31232)
t.show()
console.log('类外输出的:', lcs.name)
lcs.show_name()

编译器报错如下

技术图片

同样,在浏览器还是可以正常运行的

技术图片

typescript 公共,私有与受保护的修饰符

标签:代码   this   png   vat   person   目的   image   protected   ring   

原文地址:https://www.cnblogs.com/Jacob98/p/11216515.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!