typescript上手-タイプ(3)
33040 ワード
紹介する
伝統的なjavascriptは対象だけで、類の概念がなく、対象に向かってプログラミングするにはあまり良くない設計です.問題を発見した時、すでに何千何万人もの人が使っていました.だから、大きな修正はほとんどなくて、いろいろな修繕して補っています.核心はやはりプロトタイプをめぐって遊びます.
クラス
ここにまずes 5を置いて一つのクラスを定義します.
引き継ぐ
継承面ではes 6のクラスの継承もほぼ一致しており、extens\superを通じて
extens
スーパー
修飾子
ts属性を定義する時、公共のpublicが保護されているプロテッドプライベートのproviteです.
公共public
デフォルトはpublicで、クラス内、派生類、類以外はすべて訪問できるという意味です.
上記の例では、catの属性に自由にアクセスできます.tsメンバーは全部publicです.
クラスの中で訪問できます.派生類、類以外は訪問できません.
クラスの中、派生類の中で訪問することができます.類外ではアクセスできません.
紙の表面は読み取り専用ですか?これは実は公式サイトの文書の意味がよく分かりません.大体吸収したのは読み取り専用の属性は声明の時や構造関数の中で初期化されなければなりません.
静的属性は、例示的なオブジェクトではなく、直接にクラス自体が存在します.s 5における静的方法と静的特性
抽象類は他の派生類のベースとして使用されます.それらは通常直接的に実例化されない.インターフェースとは違って、抽象的なクラスはメンバーの実現の詳細を含むことができる.人間というのは多形の規範として、それらを含めなければならないと指定していますが、基本自体は実現しません.
伝統的なjavascriptは対象だけで、類の概念がなく、対象に向かってプログラミングするにはあまり良くない設計です.問題を発見した時、すでに何千何万人もの人が使っていました.だから、大きな修正はほとんどなくて、いろいろな修繕して補っています.核心はやはりプロトタイプをめぐって遊びます.
クラス
ここにまずes 5を置いて一つのクラスを定義します.
function Cat(name){
this.name = name;
this.say = function(){console.log(this.name)}
}
var cat1 = new Cat('dahuang')
cat1.say();
// dir _proto_
クラスを使ってクラスを定義します. class Cat{
constructor(name){
this.name = name;
}
say(){ console.log(this.name) }
}
var cat1 = new Cat('dahuang')
cat1.say();
スープを換えても薬を換えないで、見たところいずれにしても楽になりました.以下はts中類の定義です. class Cat {
name: string;//
constructor(name: string) {//
this.name = name;
}
say():void{//
console.log(this.name)
}
}
var cat1 = new Cat('dahuang')
cat1.say();
実行の順序はnewである.catの例を構築し、cat類の構造関数を呼び出して、入ってきたdahuangを属性に与えた.引き継ぐ
継承面ではes 6のクラスの継承もほぼ一致しており、extens\superを通じて
extens
class Cat {
name: string;//
constructor(name: string) {//
this.name = name;
}
say(): void {//
console.log(this.name)
}
}
class Dog extends Cat{}
let dog = new Dog('mimi');
dog.say()
//mimi
この例は,最も基本的な継承を示し,Docgは,Catベースから派生して,extendsキーワードを通じて.派生類は通常はサブクラスと呼ばれ、基本類は超類と呼ばれています.派生類は基質から属性と方法を継承した.突然このばかな犬は自分の考えがあって、事はそんなに簡単ではありませんでした. class Cat {
name: string;
constructor(name: string) {
this.name = name;
};
say(): void {
console.log(this.name)
}
}
class Dog extends Cat{
dosth:string
constructor(dosth: string){
this.dosth = dosth
};
}
この部分はコンパイルさえ必要ないです.書いている時にエディタは大きな切符で中国が赤くなりました.そして私達の派生類の構造関数はsuperを含めなければならないとヒントを与えました.スーパー
class Cat {
name: string;
constructor(name: string) {
this.name = name;
};
say(): void {
console.log(this.name)
}
}
class Dog extends Cat{
dosth:string
constructor(name:string,dosth: string){
super(name)
this.dosth = dosth
};
justdoit():void{
console.log(this.dosth)
}
}
let dog = new Dog('mimi', ' ')
dog.say() //mimi
dog.justdoit() //
今回はヒントに従ってsuperのキーワードを入れました.mimiは順調にその壮挙を完成しました.ここのsuperは基本的な構造関数を表しています.修飾子
ts属性を定義する時、公共のpublicが保護されているプロテッドプライベートのproviteです.
公共public
デフォルトはpublicで、クラス内、派生類、類以外はすべて訪問できるという意味です.
上記の例では、catの属性に自由にアクセスできます.tsメンバーは全部publicです.
class Cat {
public name: string;
constructor(name: string) {
this.name = name;
};
say(){console.log(this.name)}
}
class cat1 extends Cat();
let cat = new Cat('xiaobai')
let cat1 = new Cat('dahuang')
cat.name;
cat.say();
cat1.name;
cat1.say();
//
私有のprvateクラスの中で訪問できます.派生類、類以外は訪問できません.
class Cat {
public name: string;
constructor(name: string) {
this.name = name;
};
say(){console.log(this.name)}
}
class cat1 extends Cat();
let cat = new Cat('xiaobai')
let cat1 = new Cat('dahuang')
cat.name; //error
cat.say(); //fine
cat1.name; //error
cat1.say(); //error
保護されたprotectedクラスの中、派生類の中で訪問することができます.類外ではアクセスできません.
class Cat {
protected name: string;
constructor(name: string) {
this.name = name;
};
say(){console.log(this.name)}
}
class Cat1 extends Cat { };
let cat1 = new Cat1('dahuang');
cat1.say(); //fine
cat1.name1 //error
let cat = new Cat('xiaobai');
cat.say() //fine
cat.name; //error
リードオンリーreadonly紙の表面は読み取り専用ですか?これは実は公式サイトの文書の意味がよく分かりません.大体吸収したのは読み取り専用の属性は声明の時や構造関数の中で初期化されなければなりません.
class Cat {
readonly name: string;
constructor(name: string) {
this.name = name;
};
say() { console.log(this.name) }
}
いくつかの修饰符については同じです. class Cat {
constructor(public name: string) {};
say() { console.log(this.name) }
}
静的属性静的方法static静的属性は、例示的なオブジェクトではなく、直接にクラス自体が存在します.s 5における静的方法と静的特性
function cat(){
this.say1 = function(){} //
}
cat.name = 'dahuang' //
cat.say2 = function(){} //
//
var p = new Cat();
p.say1();
Cat.say2()
tsに静的方法と属性を定義する class Cat{
public name:string;
static age:number = 2;
constructor(name:string){
this.name = name;
}
say(){ // ,
console.log(this.name)
console.log(this.age)// this error
console.log(Cat.name)//
}
static work(){// ,
console.log(' ')
}
}
Cat.say();//
Cat.work();//
console.log(Cat.age)//
抽象類abstract抽象類は他の派生類のベースとして使用されます.それらは通常直接的に実例化されない.インターフェースとは違って、抽象的なクラスはメンバーの実現の詳細を含むことができる.人間というのは多形の規範として、それらを含めなければならないと指定していますが、基本自体は実現しません.
abstract class Cat {
constructor(name:string='cat'){}
abstract say(): any;
}
let cat1 = new Cat() //error
class Cat1 extends Cat{//fine
say(){console.log(' ')}
}
class Cat2 extends Cat{//error cat say
attck(){console.log(' ')}
}