js-多态

多态的定义:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。

例子

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

// 可以发现,多态的根本作用就是把过程化的条件分支语句转换为对象的多态性
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。