JavascriptのダクトTypeng

3879 ワード

アプリケーションシーン:フロー制御のメリット:冗長性を除去した条件判断を例に挙げて説明する:ダクトTypengを使用しない:
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のような形で、類似の機能を実現します.