Javascript中的Duck Typing

应用场景:流程控制
好处:去掉冗余的条件判断
通过实例来说明:
不使用Duck Typing:

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);

使用Duck Typing:

 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 Typing减少了conditions判断,你只需要有speak方法,那就speak,我不需要判断你的类型。

If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.

上述就是Duck Typing的真谛!

使用条件:事先知道要处理对象的方法
总结:简单来说,就是把条件判断中后的方法,添加到对应处理对象中去,对使用者来说,只需要调用方法名即可。
可以参考java中面向接口的编程,定义一个接口;接口相当于定义了接口的一个规范,每一个继承的类都需要重写这个方法,防止出现别的方法名。

interface speak{
    void speak();
}

所有的方法都使用这个

public bird implements speak{
    public void speak(){
        System.out.println("This is a bird!");
    }
}

但是在Javascript中没有接口的说法,可以采用类似Duck Typing的方式,实现类似的功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值