Fork me on GitHub

JavaScript 的面向对象的开发能否实现多态?

作者:匿名用户
链接:https://www.zhihu.com/question/20177988/answer/219695812
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

由于JavaScript并不存在方法重载,并且在继承方面也与传统的接口/类不同,所以在JavaScript中大多是通过子类重写父类方法的方式实现多态,就像上面这段代码一样,但是也可以通过一些别的方式来实现多态,毕竟这只是一种思想或者说是模式,比如包括但不仅限于这种方法:

//以下代码基于上述代码
function sayAge(object) {
if ( object instanceof Child ){
        console.log( '10' );
    }else if ( object instanceof Parent ){
        console.log( '30' );
    }
}

sayAge(child);   // '10'
sayAge(parent);  // '30'

不使用重写,通过if/else的判断,我们也得到了一个多态的实现:我想让他们告诉我他们的年龄(age),他们调用让我得到年龄的方法(sayAge)分别得到了不同的结果,这也是一个多态。只是这个多态具有较差的可扩展性而已,当然你可以改写sayAge,以获得更高的可扩展性:

function sayAge(object) {
object.prototype.sayAge();
}

当改写成这样,你没发现这实际上就是在一个对象原型上创建了与另一个对象原型同名的属性和方法吗?

 

回到最初的问题,多态是种思想,而JavaScript可以实现这种思想,所以理所当然可以实现多态喽。

posted @ 2021-04-18 14:54  Kaicy  阅读(52)  评论(0)    收藏  举报