TypeScript 中类的存取器分为两种,getter(读取)和setter(赋值),我们先写一个类,然后在这个类的基础上去介绍getter和setter。
class Person {
_age: number;
constructor(_age) {
this._age = _age;
}
}
let obj = new Person(35);
console.log(obj._age) //35
上面的代码中我们定义了一个名叫Person的类,然后定义了一个属性名叫_age,在下面实例化赋给obj后可以打印出obj的_age属性,是因为_age前面没有加修饰符,默认值是public,所以在类的外部可以访问到。那现在如果_age的属性要设置为私有,也就是前面要加上private,此时类的外部是访问不到的,这时要想访问到就要用到getter。
一、getter
class Person {
private _age: number;
constructor(_age) {
this._age = _age;
}
//getter读取
get age() {
return this._age;
}
}
let obj = new Person(35);
console.log(obj.age) //35
在上面的代码中_age前面加上了修饰符private,此时我们使用getter读取,写法就是get加上一个名称,这种写法类似一个函数,实则这是一个属性。我们把私有的_age赋值到age,然后就可以在类的外部访问到age了。
这种写法的意义在于我们对private修饰的属性进行了一个保护,可以在getter时进行修改或加密,比如
class Person {
private _age: number;
constructor(_age) {
this._age = _age;
}
//getter读取
get age() {
return this._age - 10;
}
}
let obj = new Person(35);
console.log(obj.age) //25
二、setter
当我们想修改这个obj的age时,可能会这样写
class Person {
private _age: number;
constructor(_age) {
this._age = _age;
}
//getter读取
get age() {
return this._age;
}
}
let obj = new Person(35);
console.log(obj.age) //35
obj.age = 66; //编辑器报错
console.log(obj.age)
此时看到编辑器报错,证明写法是错误的,这时候应该用到setter去赋值
class Person {
private _age: number;
constructor(_age) {
this._age = _age;
}
//getter读取
get age() {
return this._age;
}
//setter赋值
set age(age) {
this._age = age;
}
}
let obj = new Person(35);
console.log(obj.age) //35
obj.age = 66;
console.log(obj.age) //66
setter写法和getter类似,可以对属性进行保护和进一步的处理。