Type Script-クラス
2677 ワード
Type Scriptは構造タイプのシステムです.二つのタイプを比較する時、彼らの構造が同じかどうかだけに注目します.彼らの原型が同じかどうかを気にするのではありません.
しかし、私たちがクラスについて話した時、上の結論はいつも正しいとは限らないです.これは私達のクラスの属性がpublicですか?prvateですか?それともprotectedですか?
一:クラスのすべての属性はpublicです.
まず、あなたが特別に指定しない場合、クラスの属性はデフォルトではpublicです.
あるクラスに基づいてnewで出てきた2つのオブジェクトのタイプが互換性があるかどうかは、このオブジェクトの構造が一致しているかどうかを見る限り、対応するクラスは必ずしも同じではないということです.しかし、この針だけはクラスのすべての属性に対してpublicの時です.次の例を見てください.
ここではアニマルの属性をprvateに変更し、protectedに対しても同じ結果です.Public、Protect、Privateの違い
しかし、私たちがクラスについて話した時、上の結論はいつも正しいとは限らないです.これは私達のクラスの属性がpublicですか?prvateですか?それともprotectedですか?
一:クラスのすべての属性はpublicです.
まず、あなたが特別に指定しない場合、クラスの属性はデフォルトではpublicです.
あるクラスに基づいてnewで出てきた2つのオブジェクトのタイプが互換性があるかどうかは、このオブジェクトの構造が一致しているかどうかを見る限り、対応するクラスは必ずしも同じではないということです.しかし、この針だけはクラスのすべての属性に対してpublicの時です.次の例を見てください.
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
}
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
}
let animal: Animal = new Animal('kitty');
let person: Person = new Person('nana');
animal = person; // , animal person
animal = 1; // , number animal 。
二:Classがprvateまたはprotect属性を持っている時、Classがprvateまたはprotectedの属性を持っている時、構造が同じだけで、タイプが同じ結果をもたらすことができません.class Animal {
private name: string;
constructor(name: string) {
this.name = name;
}
}
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
}
let animal: Animal = new Animal('kitty');
let person: Person = new Person('nana');
animal = person; //Error,
このコードは、Animalのnameをprvateにしただけで、構造は変わりませんでしたが、animalとpersonはすでにタイプが違っています.私たちはpersonをアニマルに賦課すると、errorが得られます.ここではアニマルの属性をprvateに変更し、protectedに対しても同じ結果です.Public、Protect、Privateの違い
1: public , instance
2: protect , instance ,
3: private , class
たとえば:class Animal {
public category: string;
protected color: string;
private name: string;
constructor(category: string, name: string, color: string) {
this.category = category;
this.name = name;
this.color = color;
}
}
class Cat extends Animal {
constructor(category: string, name: string, color: string) {
super(category, name, color);
}
printInfo() {
console.log(`The category of the cat is ${this.category}`); // No Error
console.log(`The color of the cat is ${this.color}`);// No Error
console.log(`The name of the cat is ${this.name}`);//Error!
}
}
let animal = new Animal('animal', 'animal', 'white');
let cat = new Cat('cat', 'kitty', 'black');
animal.category = 'animal_1';//No Error. instance public
console.log(cat.color);//Error! insatance protect
要約すると、私たちの属性アクセス権限は三つのレベルがあります.1: instance :public
2: :public protected
3: class :private