一、类访问修饰符
ts中有四个修饰符,分别为:
- public - 公有
- private - 私有
- protected - 受保护的
- readonly - 只读
public
在ts的类中,所有成员若是没有指定修饰符,成员默认都是public的。
使用public修饰符的成员,可以在类的内外自由访问: ```typescript class App { // 未指定修饰符,默认为public,等同于: public name = ‘韩梅梅’ name = ‘韩梅梅’ public age = 18 } const myName = new App().name // 韩梅梅
<a name="hWtp3"></a>## private当成员被标记为private时,则不能在类的外部访问该成员:```typescriptclass App {// 未指定修饰符,默认为public,等同于: public name = '韩梅梅'private name = '韩梅梅'public age = 18}const myName = new App().name // error: 属性“name”为私有属性,只能在类“App”中访问。ts(2341)
protected
protected与private行为相似,但有一点不同,protected成员在派生类中可以访问。
vue中的使用场景较少,此处就不赘述protected的作用了。
readonly
被标记为readonly的成员代表他是只读的,不能赋值与修改:
class App {// 未指定修饰符,默认为public,等同于: public readonly name = '韩梅梅'readonly name = '韩梅梅'}const myName = new App().name // 韩梅梅new App().name = '李雷' // error: Cannot assign to 'name' because it is a read-only property.ts(2540)
readonly可以与其他三个修饰符共同存在:
class App {readonly name = '韩梅梅'public readonly age = 18private readonly gender = '女'protected readonly phone = '133********'}
但是其他三个同时只能存在一个:
class App {public private name = '韩梅梅' // error: 已看到可访问性修饰符。ts(1028)}
修饰符在Vue中的作用
了解了基础知识后,再来了解一下修饰符在vue中会产生的影响。
这几个修饰符除了readonly外,其他大都是对于从外部访问类时的限制。在vue中从外部类访问比较常见的就是 ref、$children、$parent 等情况。下面以 ref 作为示例,protected在此暂不说明。
若是示例暂时看不懂的话,可以先查看 Vue ts - 实例选项 篇后再来看该案例。
子组件 TodoItem.vue
// 子组件 TodoItem.vueimport { Component, Vue } from 'vue-property-decorator'@Componentexport default class TodoItem extends Vue {name = '韩梅梅' // 未带修饰符,默认为publicpublic age = 18readonly department = '销售部'private gender = '女'}
父组件 Todo.vue
// 父组件 Todo.vueimport { Component, Vue, Ref } from 'vue-property-decorator'import TodoItem from '@/components/TodoItem.vue'@Component({components: { TodoItem },})export default class Todo extends Vue {@Ref('refTodoItem') readonly refTodoItem!: TodoItem // Vue Componentprivate mounted() {// public修饰的属性可以从外部自由的访问和修改console.log(this.refTodoItem.name) // 韩梅梅console.log(this.refTodoItem.age) // 18this.refTodoItem.age = 20console.log(this.refTodoItem.age) // 20// readonly修饰的属性可以从外部访问,但是不能修改console.log(this.refTodoItem.department) // 销售部// error: Cannot assign to 'department' because it is a read-only property.Vetur(2540)this.refTodoItem.department = '营业部'// provide修饰的私有属性无法从外部访问和修改// error: Property 'gender' is private and only accessible within class 'TodoItem'.Vetur(2341)console.log(this.refTodoItem.gender)}}
由上述例子就可以大概知道这几个修饰符在vue中的具体作用了,哪个属性该用什么修饰符相信大家心里也可以有个大概。具体的每个属性将会在最后面有个完整示例给大家。
