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