TypeScript属性封装

作者: 生命里那束光 | 来源:发表于2022-03-22 13:30 被阅读0次

属性的封装

1.TypeScript可以在类中的属性前添加属性的修饰符

  • public 修饰的属性可以在任意位置访问(修改)默认值
  • private 私有属性, 私有属性只能在类内部进行访问(修改);但可以通过在类中添加方法使得私有属性可以被外部访问
  • protected 受保护的属性,只能在当前类和当前类的子类中访问(修改)

2.js和ts封装属性的区别

  • 由于属性是在对象中设置的,属性可以任意的被修改,将会导致对象中的数据变得非常不安全。因此需要对属性进行封装。
  • js封装的属性存取器使用时需要调用相应的getter和setter方法;而ts封装的属性存取器使用时可直接当作变量来用就行。
  • 加getter和setter方法只是为了对属性的值做判断,如果不需做判断则没必要使用。
(function(){
    // 定义一个表示人的类
    class Person{
        public _name: string;
        private _age: number;

        constructor(name: string, age: number) {
            this._name = name;
            this._age = age;
        }
        /* 
            getter 方法来读取属性
            setter 方法来设置属性
                - 他们被称为属性的存取器
        */

       /*  js中封装的属性存取器
       // 定义方法 用来获取name属性
        getName(){
            return this._name;
        }
        //  定义方法,用来设置name属性
        setName(value: string){
            this._name = value;
        }
        getAge(){
            return this._age;
        }
        setAge(value: number){
            // 判断年龄是否合法
            if(value >= 0){
                this._age = value;
            }
        } 
        */
        // TS中设置getter方法的方式
        get name(){
            console.log('get name()执行了!!');
            return this._name;
        }
        set name(value:string){
            this._name = value;
        }
        get age(){
            return this._age;
        }
        set age(value:number){
            if(value >= 0){
                this._age = value
            }
        }
    }
    const per = new Person('孙悟空', 18);

    /* 
        js封装的属性存取器使用时需要调用相应的getter和setter方法;
        而ts封装的属性存取器使用时可直接当作变量来用就行
    */
    // per._name = '猪八戒';
    // per._age = -38;
    // per.setName('猪八戒');
    // per.setAge(-33);
    // console.log(per);
    per.name = '猪八戒';
    per.age = -13
    console.log(per);
})();

3.在定义类时可以直接将属性定义在构造函数中(简化代码),实际上是语法糖

    // class C{
    //     name: string;
    //     age: number;
    //     // 可以直接将属性定义在构造函数中
    //     constructor(name: string, age:number){
    //         this.name = name;
    //         this,age = age;
    //     }
    // }
    class C{
        // 语法糖
        // 可以直接将属性定义在构造函数中
        constructor(public name: string, public age:number){

        }
    }

声明:本文内容引自bilibili “尚硅谷TypeScript教程”
个人学习归纳总结 ,欢迎畅谈。

相关文章

  • TypeScript属性封装

    属性的封装 1.TypeScript可以在类中的属性前添加属性的修饰符 public 修饰的属性可以在任意位置访问...

  • class 类

    基本用法 构造函数和this 继承 抽象类 接口(TypeScript 独有) 属性的封装 泛型

  • TypeScript 类、接口、属性封装基础

    1、TypeScript 类 一、类的基本构成 类里面有有两个部分 1、属性   2、方法 1.1、定义属性 ...

  • ios-结构体和类的区别

    1、结构体只能封装属性,类却不仅可以封装属性也可以封装方法。如果一个封装的数据有属性也有行为,就只能用类了。 2、...

  • ios-结构体和类的区别

    1、结构体只能封装属性,类却不仅可以封装属性也可以封装方法。如果一个封装的数据有属性也有行为,就只能用类了。 2、...

  • 结构体和类

    1、结构体只能封装属性,类却不仅可以封装属性也可以封装方法。如果一个封装的数据有属性也有行为,就只能用类了。 2、...

  • 02-谈谈面向对象的三大特征

    封装,继承,多态 封装 类,封装了数据(属性)和行为(方法) 狭义的封装:就是创建一个类,属性私有化,提供gett...

  • 封装、继承、多态

    封装:隐藏内部实现,稳定外部接口. 封装就是定义类 定义属性 定义方法 属性封装了setter get方法 @pr...

  • 面向对象三大特性之封装

    1.面向对象三大特性:封装、继承、多态 封装的实现步骤 封装:就是隐藏属性,通过方法来得到属性。 1.修改属性的可...

  • day12_封装_this_构造方法_API_String类

    封装 构造方法 API String 封装 概述 将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。 封装...

网友评论

    本文标题:TypeScript属性封装

    本文链接:https://www.haomeiwen.com/subject/klsfjrtx.html