多态不是简单两句话可以讲清楚,但至少能让你明白它是什么。
简单解释多态
拆分一下多态的英文:Polymorphism 就是 poly(复数) + morph(形态) + ism,也就是多种形态。
在JavaScript中,我们可以这样去理解多态:同一操作作用在不同的对象上,可以产生不同的解释和不同的执行结果。
更简单一些说:给不同对象发送同一消息,可能会得到不同的反馈。
举个🌰栗子
Freak是一位吉他手,Alex是一名主唱,当他们听到鼓点响起时,Freak会开始弹吉他,Alex会开始演唱。
同样一个鼓点,但Freak和Alex做的事是不同的。
代码实践
下面几行代码简单的把上面的例子实现,说明了对象的多态特性:
|
|
上面代码虽然实现了”多态”的特性,但这种”多态”是不让人满意的,如果贝斯手来了,我们还得去修改playDrum
的代码,要知道,修改代码风险太大了,BUG往往就是那个时候出现的。
其实多态背后的核心思想是:将“做什么”和“谁去做以及怎样做”相分离,也就是将“不变的事物”和“可能改变的事物”相分离。
在上面这个例子中,鼓手打鼓是不会改变的,改变的是不同乐手的演奏方式,我们可以将不变的分离出来,把可变的封装起来。
这样我们的代码就是可扩展的,也符合开放-封闭原则
,这显得优雅和安全的多。
升级版🌰栗子
|
|
现在,当吉他手和主唱听到鼓点,他们还是会做出不同的反应。
这时如果贝斯手来了,那很简单,加上贝斯手就行了:
|
|
以上只是最直观的多态理解方式,还有利用继承得到多态效果、如何利用多态特性进行面向对象编程、多态与设计模式等等。
希望这篇文章能帮到你更好的理解JavaScript中的多态特性。
本文作者:余震(Freak)
本文出处:Rockjins Blog
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN许可协议。转载请注明出处!