js是模拟面向对象吗?

有的朋友会认为,js不是面向对象语言,但是js可以模拟面向对象。

其实这种认知是错误的。

面向对象

js本身就是面向对象的,它并不需要去「模拟面向对象」。

大部分人的思维定势是:像java那种基于类的面向对象才叫面向对象。

他们口中的「使用js模拟面向对象」其实是指「模拟基于类的面向对象」。

js的面向对象是基于原型的,它实现面向对象的方式和主流的流派不一样,所以才会产生这种误解。

从ES6开始,JS提供了 class 关键字来定义类,但是这样的方案本质上依然是基于原型运行时系统的模拟。

这篇文章讲的思想是,「基于类」并非面向对象的唯一形态。我们应该把视线从「类」上移开,去感受一下「原型系统」。

原型系统是一个非常优秀的抽象对象的方式。