多态的定义:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
例子
let say = function() {
if(animal instance Dack) {
console.log('I am dack');
} else if(animal instance Chicken) {
console.log('I am chicken');
}
}
function Dack() {};
function Chicken() {};
say(new Dack()); // I am dack
say(new Chicken()); // I am chicken
// 同一操作(执行say方法) 作用在不同对象上(dack和chicken对象),产生不同结果(I am dack 和 I am chicken)
当我们要多添加一个动物后,就需要修改say函数中的代码,这样是不好的
多态背后的思想就是想‘做什么’和‘谁去做’分离开来,也就是将‘不变的事物’和‘可变的事物’分离开来
改进的代码
let say = function(animal) {
animal.speak();
}
function Dack() {};
function Chicken() {};
Dack.prototype.speak() {
console.log('i am dack');
}
Chicken.prototype.speak() {
console.log('i am chicken');
}
say(new Dack()); // i am dack
say(new Chicken()); // i am chicken
// 当我们需要添加一个动物时,只需要
function Dog() {};
Dog.prototype.speak = function() {\
console.log('i am dog');
}
say(new Dog()); // i am dog
// 可以发现,多态的根本作用就是把过程化的条件分支语句转换为对象的多态性