TS学习笔记07 封装

TS学习笔记07 封装

将类的属性封装在类中,不允许在类的外部直接访问,保护数据的安全,使内容可控 。

只能通过被授权的方法才能对数据进行访问,称为存取器 getters/setters 。

可以看下面的代码:

以下划线为开头命名私有变量
class Person{
    public name:string = 'tom';  // 默认就是public修饰符
    protected age:number = 18;
    private hobby:string = 'game';

    // 不允许直接访问该属性,命名上一般以下划线_开头
    private _sex:string = 'male';
}

​ 如果这个时候想直接在外部访问,会出现这样的问题:

image-20220225153810044
那么如果想要访问类的内部方法,那么需要怎样操作:
1. 取值: get 新属性名(){ 控制私有属性的取值 }
class Person{
    public name:string = 'tom';  // 默认就是public修饰符
    protected age:number = 18;
    private hobby:string = 'game';

    // 不允许直接访问该属性,命名上一般以下划线_开头
    private _sex:string = 'male';

    /**
     * 提供get/set存取器,用来对属性进行访问
     */
    //其中get表示的是get方法,sex()表示的新的属性,此时不需要用下划线开头
    get sex(){
        console.log('获取_sex值');
        return this._sex;
    }
}

​ 此时调用这个sex()方法就比较简单了,直接访问即可。

let p = new Person();
console.log(p.sex);
  1. 赋值: set 新属性名(新值){ 控制私有属性的赋值 }
class Person{
    public name:string = 'tom';  // 默认就是public修饰符
    protected age:number = 18;
    private hobby:string = 'game';

    // 不允许直接访问该属性,命名上一般以下划线_开头
    private _sex:string = 'male';

    // 静态属性,属于整个类,并不属于某个实例所特有
    static address:string = '南京';

    /**
     * 提供get/set存取器,用来对属性进行访问
     */
    //其中get表示的是get方法,sex()表示的新的属性,此时不需要用下划线开头
    get sex(){
        console.log('获取_sex值');
        return this._sex;
    }
    
    set sex(value){
       console.log('为_sex赋值');
       this._sex = value;
    }
}

​ 此时赋值操作也很简单,直接赋值即可。

let p = new Person();
p.sex = 'female';
3. 这时候或许有同学会疑问,那这样和普通的存取值有什么区别?

​ 区别在于,此时对数据的操作是通过存取器来进行的,也就是说我们可以在get()或者set()方法里面添加校验规则或者限制条件。看如下代码:

​ 我可以取值的时候都返回给我大学的值,存值的时候只能为性别。

class Person{
    public name:string = 'tom';  // 默认就是public修饰符
    protected age:number = 18;
    private hobby:string = 'game';

    // 不允许直接访问该属性,命名上一般以下划线_开头
    private _sex:string = 'male';

    show(){
        console.log(this.name);
        console.log(this.age);
        console.log(this.hobby);
    }

    /**
     * 提供get/set存取器,用来对属性进行访问
     */
    get sex(){
        console.log('获取_sex值');
        return this._sex.toUpperCase();
    }
    
    set sex(value){
        console.log('为_sex赋值');
        if(value=='male'||value=='female'){
            this._sex = value;
        }else{
            console.log('错误:性别只能为:male、female');
        }
    }
}
静态属性:属于整个类,并不属于某个实例所特有。
 static address:string = '南京';

​ 访问静态属性:

// console.log(p.address); // 报错,不能通过 对象名.属性 访问
console.log(Person.address); // 静态属性要通过  类名.属性 访问
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来回答你关于 TypeScript 中 Symbol 和模块的问题。 首先,Symbol 是 TypeScript 中的一种新的基本数据型,它可以用来创建唯一的标识符。在 TypeScript 中,Symbol 主要有两种用法: 1. 作为对象属性的键值,用来表示一个对象属性的唯一标识符。 2. 作为一个的静态属性或方法,用来表示该的唯一标识符。 下面是一个使用 Symbol 作为对象属性键值的示例: ```typescript const key = Symbol('myKey'); const obj = { [key]: 'value' }; console.log(obj[key]); // 输出'value' ``` 在上面的代码中,我们使用 Symbol('myKey') 创建了一个新的 Symbol,然后将该 Symbol 作为对象 obj 的属性键值,并赋值为'value'。最后,我们通过 obj[key] 的方式来访问该属性,并输出了'value'。 另外,模块是 TypeScript 中的另一个重要概念,它用来组织和管理代码。在 TypeScript 中,模块可以使用 import 和 export 命令来进行导入和导出。下面是一个使用模块的示例: ```typescript // moduleA.ts export const num = 123; // moduleB.ts import { num } from './moduleA'; console.log(num); // 输出123 ``` 在上面的代码中,我们定义了一个名为 num 的常量,并将其导出。然后,在另一个模块中,我们使用 import 命令将 num 导入,并通过 console.log 输出了它的值。 这就是关于 TypeScript 中 Symbol 和模块的简单介绍,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值