たとえば、属性をカプセル化することが安全のためである理由
class SX {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
const sx = new SX('哈哈',12);
sx.name = '刘'
name属性は外部から任意に変更できるため、セキュリティが低下します
属性を導入する
private 私有属性,只能在类内部进行访问修改,通过在类中添加方法使得私有属性可以被外部访问,之前我们不写,默认就是public
それから私達は書く
class SX {
private _name: string;
private _age: number;
constructor(name: string, age: number) {
this._name = name;
this._age = age;
}
//定义方法,获取属性
getName(){
return this._name;
}
//定义方法,设置name属性
setName(value:string){
this._name = value
}
}
const sx = new SX('哈哈',12);
sx.setName('猪八戒')
これで、変更方法が手元にあります。変更方法を設定しないと、このプロパティは変更されません。
上記の方法は自分で実装しますが、TSはより便利な方法を提供します
class SX {
private _name: string;
private _age: number;
constructor(name: string, age: number) {
this._name = name;
this._age = age;
}
//获取属性方法,get
get name(){
return this._name;
}
//设置属性方法,set
set name(value:string){
this._name = value;
}
}
const sx = new SX('哈哈',12);
sx.name; //获取
sx.name = '猪八戒'
パブリック属性とプライベート属性に加えて、tsには保護された属性もあります
protected 受保护的属性,只能在当前类和当前类的子类里面调用
それを使用する方法?
class protect{
protected name : string;
constructor(name : string){
this.name = name;
}
}
class protectchildren extends protect{
getter(){
console.log(this.name) //可以取到
}
}
const aaa = new protectchildren('sss');
// aaa.name 取不到
最後に、クラスを書く簡単な方法を紹介します
以前はこのように書かれていました
class bbbb{
public name : string;
constructor(name : string){
this.name = name;
}
}
このように書くだけで、効果は同じです
class bbbb{
constructor(public name:string){
}
}
最後に、もう一度言いますが、カプセル化とは、属性をより安全にし、getとsetを使用して変更することです。