javascript - js 多态如何理解,最好能有个例子
巴扎黑
巴扎黑 2017-04-10 15:38:14
[JavaScript讨论组]

最近读到一本书《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());

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

巴扎黑
巴扎黑

全部回复(4)
天蓬老师

鸭子类(Duck Type)是Mixin-Pattern的结果,就是将A的特性(方法+字段)赋予到B中,而A与B均对此无感知,唯一感知的就是调用者C而已,并且强调A与B并不能严格地抽象为同一个类别,仅形似而神不似。
由于JS是动态类型脚本语言,因此Duck Type在运用上符合多态的特性。
若要遵循多态定义中,子类重写父类方法,并且子类示可任意例替代父类实例的调用,则要采用JS中delegate-base inheritance来实现多态了。
具体可参考http://www.cnblogs.com/fsjohnhuang/p/4634039.html

大家讲道理

同一个实现接口,使用不同的实例而执行不同的操作。比如:打印机可以看作是父类,黑白打印机、彩色打印机是他的两个子类。父类打印机中的方法“打印”在每个子类中有各自不同的实现方式,比如对黑白打印机执行打印操作后,打印效果是黑白的,而对彩色打印机进行打印操作后,打印效果是彩色的。

伊谢尔伦

我换个角度提下我个人的小建议。多态是程序设计模式中重中之重的问题,深入学习设计模式,也就明白什么是多态了。

黄舟

这种是通过该构造函数判断的。要想通过参数类型 和 参数个数 可以用arguments,js不支持重载,没必要这样

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号