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); })()