js 多态如何理解,最好能有个例子

最近读到一本书《JavaScript设计模式与开发实践》上,讲到js的多态,我在JavaScript高级程序编程里貌似都没有见过关于这个的详细讲解,所以想问问大家有没有什么推荐的文章或者博客,可以推荐给小弟的,让小弟可以深入了解一下。
先把那本上的例子拿出来跟大家分享:
书里面的故事:本人家里养了一只鸡,一只鸭。当主人向他们发出‘叫’的命令时。鸭子会嘎嘎的叫,而鸡会咯咯的叫。转化成代码形式如下

非多态代码示例

var makeSound = function(animal) {
    if(animal instanceof Duck) {
        console.log('嘎嘎嘎');
    } else if (animal instanceof Chicken) {
        console.log('咯咯咯');
    }
}
var Duck = function(){}
var Chiken = function() {};
makeSound(new Chicken());
makeSound(new Duck());

多态的代码示例

var makeSound = function(animal) {
    animal.sound();
}

var Duck = function(){}
Duck.prototype.sound = function() {
    console.log('嘎嘎嘎')
}
var Chiken = function() {};
Chiken.prototype.sound = function() {
    console.log('咯咯咯')
}

makeSound(new Chicken());
makeSound(new Duck());

多态背后的思想是将”做什么“和”谁去做以及怎样去做分开“。

阅读 12.3k
评论
    7 个回答
    Rabbit.prototype.toString = function() {
      return `a ${this.type} rabbit`;
    };
    
    console.log(String(blackRabbit));
    // → a black rabbit

    This is a simple instance of a powerful idea. When a piece of code is written to work with objects that have a certain interface—in this case, a toString method—any kind of object that happens to support this interface can be plugged into the code, and it will just work.

    This technique is called polymorphism.

    调用同一个的方法,却能得到不同的实现和结果,这种现象就是多态。原因就是这个方法的作用就是调用其它方法,或者说这个方法将具体逻辑的定义权交给外部,自己只负责调用,而不考虑实现。

    举例:只要部署了 iterator 接口的数据结构,都可以使用 for of 循环。for of 的设计就运用了多态的思想。

    参考:《Eloquent JavaScript》chapter 6

      相似问题
      推荐文章