ts15属性的封装

(function () {
    //定义一个表示人的类
    class Person {
        /* 
        可以在属性前面添加属性的修饰符
        public:public修饰的属性可以在任意部分访问和修改,是默认修饰符。
        private:private私有属性只能在类的内部访问和修改
                通过在类中添加方法使得私有属性可以被外部访问
        protected:受保护的类,只能当前类和当前类的子类中访问和修改,不能在实例中访问和修改
            
        */
        public _name: string;
        public _age: number;
        constructor(name: string, age: number) {
            this._name = name;
            this._age = age;
        }
        /* 
          getter方法用来读取属性
          setter方法用来设置属性
            -他们被称为属性的存取器
        */
        // getName(){
        //     return this._name
        // }
        // setName(name:string){
        //         this._name = name
        // }
        // getAge(){
        //     return this._age
        // }
        // setAge(age:number){
        //     if(age<0){
        //        console.error('年龄不能小于0');
        //         return
        //     }
        //     this._age = age

        // }

        /* 
            TS中设置get方法的方式
        */
        get name() {
            return this._name
        }
        set name(name: string) {
            this._name = name
        }
        get age() {
            return this._age
        }
        set age(age: number) {
            if (age < 0) {
                console.error('年龄不能小于0');
                return
            }
            this._age = age
        }
    }
    const per1 = new Person('sun', 18)
    /* 
     现在在对象里面设置的属性是可以被任意修改的
     属性可以任意被修改将会让对象中的数据变得非常不安全
 */
    // per1.setAge(-20)
    // per1.setName('li')
    per1.name
    per1.age = -222
    per1.age = 11

    console.log(per1.age);

    class A {
        protected num: number;
        constructor(num: number) {
            this.num = num
        }
    }
    class B extends A {

        sayhello() {
            console.log(this.num);

        }
    }
    let b = new B(1)
    // b.num//无法访问


    class C {
        //可以将属性定义在构造函数中
        constructor(public name: string, public age: number) {

        }
        /* 等价于 */
        // class C {
        //     name:string;
        //     age:number;
        //     constructor(name:string,age:number){
        //         this.name = name;
        //         this.age = age;
        //     }
        // }
    }
    let c = new C('张三', 12)
    console.log('C', c);

})()

 

posted @ 2023-01-18 16:18  SadicZhou  阅读(35)  评论(0编辑  收藏  举报