让你彻底理解TypeScript中的readonly

简介: 让你彻底理解TypeScript中的readonly

1.readonly的讲解


readonly修饰符,首先是一个关键字


对类中的属性成员进行修饰


修饰之后,该属性成员就不能修改了。


只能够进行访问


在构造函数中是可以对只读属性(readonly)进行修改的


2.什么时候使用readonly


在很多时候,我们对用户登录后;


会对用户的信息进行存储


这个时候我们是允许在对值进行修改


就是说:一旦确认后就不能够再次进行修改就可以使用readonly


需求:一旦实例化后,


就不能够对实例化的对象【name】属性进行修改值。


看下面的代码


3.readonly的基本使用


class Person {
    readonly name:  string
    constructor(name: string) {
        this.name=name
    }
    say() {
        console.log(`我的名字叫${this.name}`)
    }
}
let person = new Person('小可爱');
console.log(person);
// ps:这里报错了
person.name = '大可爱'


1425695-20210716203945002-582818309.png

4.有新的发现


有细心的小伙伴可能发现了。


我在let person = new Person('小可爱');


这个时候并没有报错;


你不是说readonly修饰之后,该属性成员就不能修改了。


为啥构造函数中的就可以去设置值了;


机智的小伙伴可能就会这样去操作,


在类中的普通方法去修改被readonly的属性


5.这样可以成功吗?


class Person {
    readonly name:  string
    constructor(name: string) {
        this.name=name
    }
    say() {
        console.log(`我的名字叫${this.name}`)
    }
    //报错了
    updtaName() {
        this.name='张三'
    }
}
let person = new Person('小可爱');


1425695-20210716203953134-366513620.png

6.readonly 修饰参数属性


构造函数中的name参数,


一旦使用readonly进行修饰后,


那么该name参数就可以叫做参数属性


构造函数中的name参数,一旦使用readonly进行修饰后,


那么Person中就有了一个name属性成员


对上面这一句话的讲解


{ 本来我们是没有name属性的在Person类中,那为啥可以this.name=name  }


也就是说 Person中就有了一个name属性成员;


因此我们才可以 this.name=name


class Person {
    constructor(readonly name: string='大可爱') {
        this.name=name
    }
}
let person = new Person('小可爱');
console.log(person)
// Person { name: '小可爱' }
// 通过这个输出语句
// 我们可以说明
// 构造函数中的name参数,一旦使用readonly进行修饰后,
//那么Person中就有了一个name属性成员
console.log( person.name)
//输出 【小可爱】

7.可以省略构造中的this.name=name


class Person {
    constructor(readonly name: string='大可爱') {
    }
}
let person = new Person('小可爱');
console.log(person)
//输出 Person { name: '小可爱' }
//我们发现与上面的效果一样


8.readonly的总结


通过上面的栗子,


我们知道


readonly修饰符,首先是一个关键字


对类中的属性成员进行修饰


修饰之后,该属性成员就不能修改了。


只能够进行访问


在构造函数中是可以对只读属性(readonly)进行修改的


在类的普通方法中不能够被修改的哈!

相关文章
|
10月前
|
JavaScript
TypeScript get 与 set 的使用
TypeScript get 与 set 的使用
137 0
|
21天前
|
JavaScript 前端开发
7.【TypeScript 教程】TypeScript 枚举(Enum)
7.【TypeScript 教程】TypeScript 枚举(Enum)
14 3
|
21天前
|
JavaScript 前端开发
5.【TypeScript 教程】TypeScript Symbol
5.【TypeScript 教程】TypeScript Symbol
22 5
|
19天前
|
JavaScript 前端开发 C++
typescript 只读属性
typescript 只读属性
|
1月前
|
JavaScript
TypeScript中typeof的简单介绍
TypeScript中typeof的简单介绍
|
10月前
|
JavaScript
TypeScript--枚举
TypeScript--枚举
|
JavaScript 前端开发 编译器
Typescript 类型
Typescript 类型
163 0
Typescript 类型
|
JavaScript
不要再使用 TypeScript 的 enum 语法
## 前言 已经有很多文章指出 `enum` 语法的各种缺陷了,但是在日常使用时,大家可能并不会碰到这类问题,而 `enum` 又有着一些便利,所以一些呼吁禁用 `enum` 的观点并不能得到重视。 直到我们发现另一个严重问题后,我觉得应该再强调一遍这个事情。 ## `enum` 不支持 Tree-Shaking 前段时间有同事说没有用到的 `enum` 定义被打到了包里,我当时觉得这不太
typescript42-readonly修饰符
typescript42-readonly修饰符
55 0
typescript42-readonly修饰符