js——多态
1."多态性"模拟
多态的实际含义:同一操作作用于不同的对象上,可以产生不同的解释和不同的执行结果。
- 一个发出声音的方法
makeSound
- 一个猫的类
Cat
- 一个狗的类
Dog
- 当调用
makeSound
并且传入的是一只猫则打印出"喵喵喵~"
- 当调用
makeSound
并且传入的是一只狗则打印出"汪汪汪!"
function makeSound(who){
who instanceof Cat ? console.log("喵喵喵~") : who instanceof Dog ? console.log("汪汪汪!") : console.log("不符合标准");
}
class Cat{};
class Dog{};
makeSound(Cat());
makeSound(Dog());
2.对象的多态性
多态最根本的作用就是通过把过程化的条件语句转化为对象的多态性,从而消除这些条件分支语句。
多态思想改造:
function makeSound (animal) {
if (animal.sound instanceof Function) {
// 判断是否有animal.sound且该属性为函数
animal.sound()
}
}
class Cat {
sound () {
console.log('喵喵喵~')
}
}
class Dog {
sound () {
console.log('汪汪汪!')
}
}
class Pig {
sound () {
console.log('啂妮妮')
}
}
makeSound(new Cat()) // '喵喵喵~'
makeSound(new Dog()) // '汪汪汪!'
makeSound(new Pig()) // '啂妮妮'
3.TS中使用继承得到多态效果
interface Animal {
sound(): void
}
function makeSound (animal: Animal) {
animal.sound()
}
class Cat implements Animal {
// 使用 implements 继承接口
Animal sound(): void {
console.log('喵喵喵~')
}
}
class Dog implements Animal {
sound(): void {
console.log('汪汪汪!')
}
}
maekSound(new Cat())
makeSound(new Dog())
读后感:期待呆呆大佬的设计模式系列,默默去翻翻后端语言去,忘得差不多了。。。
只是摘选,原文详情请点击下方链接。。。
来自评论区的宝藏:
作者:LinDaiDai_霖呆呆
原文链接