JavascriptのダクトTypeng
3879 ワード
アプリケーションシーン:フロー制御のメリット:冗長性を除去した条件判断を例に挙げて説明する:ダクトTypengを使用しない:
使用条件:処理対象を事前に知っておく方法のまとめ:簡単に言えば、条件判断中の方法を、対応する処理対象に追加するということです.使用者にとっては、メソッド名を呼び出すだけでいいです.javaのインターフェース向けプログラミングを参照して、インターフェースを定義することができます.インターフェースはインターフェースを定義した一つの仕様に相当します.継承クラスごとにこの方法を書き換えて、他の方法名が現れるのを防ぐ必要があります.
function bird(){
this.name="bird";
}
function duck(){
this.name="duck";
}
const type=(animal)=>{
if(animal instanceof bird){
console.log("I am a bird");
}else if(animal instanceof duck){
console.log("I am a duck");
}
}
var b=new bird();
var d=new duck();
type(b);
type(d);
ダクトTypengを使う: var bird={
name:'bird',
speak:function(){
console.log("I am a "+this.name);
}
}
var duck={
name:"duck",
speak:function(){
console.log("I am a "+this.name);
}
}
const type=(animal)=>{
if(typeof animal.speak == "function"){
animal.speak();
return true;
}
return false;
}
type(bird);
type(duck);
Duck Typengを使ってconditionsの判断を減らしました.あなたはspeakの方法があるだけで、speakにします.あなたのタイプを判断する必要はありません.If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.
上記はダクトTypengの真の意味です!使用条件:処理対象を事前に知っておく方法のまとめ:簡単に言えば、条件判断中の方法を、対応する処理対象に追加するということです.使用者にとっては、メソッド名を呼び出すだけでいいです.javaのインターフェース向けプログラミングを参照して、インターフェースを定義することができます.インターフェースはインターフェースを定義した一つの仕様に相当します.継承クラスごとにこの方法を書き換えて、他の方法名が現れるのを防ぐ必要があります.
interface speak{
void speak();
}
すべての方法はこれを使います.public bird implements speak{
public void speak(){
System.out.println("This is a bird!");
}
}
しかし、Javascriptにはインターフェースがないという説があります.ダクトTypeのような形で、類似の機能を実現します.