多态的实际含义是:同意操作作用于不同的对象上面可以产生不同的解释和不同的执行结果。换句话说,给不同的最像发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈。
一段"多态" 的js代码
var makeSound = function (animal){
if(animal instanceof Duck){
console.log('嘎嘎嘎')
}else if(animal instanceof Chicken){
console.log('咯咯咯')
}
}
var Duck = function () {
};
var Chicken = function () {
};
makeSound(new Duck());
makeSound(new Chicken());
上面的这段代码已经符合了对多态的定义,但是这样的"多态"是无法令人满意的,如果在增加一种动物,例如狗,我们必须改动makeSound函数,才能让狗也发出叫声,修改代码总是危险的,修改的地方越多,程序出错的可能性越大,而且当动物种类越多,makeSound有可能变成一个巨大的函数。
"多态"的思想把不变的部分隔离出来,把可变的部分封装起来,这给予我们扩展程序的能力,相对于修改代码,仅仅增加代码就能完成相同的功能,这样就先的优雅和安全很多。下面是改写后的代码。
var makeSound = function (animal){
animal.sound()
}
var Duck = function () {
}
Duck.prototype.sound = function () {
console.log('嘎嘎嘎')
}
var Chicken = function () {
}
Chicken.prototype.sound = function () {
console.log('咯咯咯')
}
makeSound(new Duck());
makeSound(new Chicken());
如果以后要增加一个狗只要简单的追加一些代码就可以了,从而最大成度的保持了代码的可维护性
var Dog = function () {
}
Dog.prototype.sound = function () {
console.log('汪汪汪')
}
makeSound(new Dog());
网友评论