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