(function () { // 定义一个表示人的类 class Person { // Ts可以在属性前添加属性的修饰符 /* public 修饰的属性可以在任意位置访问(修改) 默认值 private 私有属性,私有属性只能在类内部进行访问(修改) 通过在类中添加方法使得私有属性可以被外部访问 protected 受保护的属性,只能在当前类和当前类的子类中访问(修改) */ private _name: string; private _age: number; constructor(name: string, age: number) { this._name = name; this._age = age; } // 定义方法,用来获取name属性 /* getName() { return this.name; } // 定义方法,用来设置name属性 setName(value: string) { if (value == '') { alert('不能修改') } else { this.name = value; } } */ // Ts中设置getter方法的方式 get name() { console.log('get name()执行了'); return this._name } set name(val: string) { if (val != '') { this._name = val; } } } class A { protected num: number; constructor(num: number) { this.num = num; } } class B extends A{ test() { console.log(this.num); } } const b = new B(123); // 错误:因为num加了protected修饰符,是受保护属性,只能被父类和其子类访问 b.num; class C{ // 可以直接将属性定义在构造函数中 // 不用写this.name = name... constructor(public name: string, public age: number) { } } const per = new Person('zhangsan', 18); // per.getName(); // per.setName('lisi'); console.log(per); /* 现在的属性是在对象中设置的,属性可以任意的被修改 属性可以任意被修改将会导致对象中的数据变得非常不安全 per.name = 'lisi'; per.age = 38; */})()