你好,我是 winter。
与其它的语言相比,JavaScript 中的“对象”总是显得不那么合群。
一些新人在学习 JavaScript 面向对象时,往往也会有疑惑:
为什么 JavaScript(直到 ES6)有对象的概念,但是却没有像其他的语言那样,有类的概念呢;
为什么在 JavaScript 对象里可以自由添加属性,而其他的语言却不能呢?
甚至,在一些争论中,有人强调:JavaScript 并非“面向对象的语言”,而是“基于对象的语言”。这个说法一度流传甚广,而事实上,我至今遇到的持有这一说法的人中,无一能够回答“如何定义面向对象和基于对象”这个问题。
实际上,基于对象和面向对象两个形容词都出现在了 JavaScript 标准的各个版本当中。
我们可以先看看 JavaScript 标准对基于对象的定义,这个定义的具体内容是:“语言和宿主的基础设施由对象来提供,并且 JavaScript 程序即是一系列互相通讯的对象集合”。
这里的意思根本不是表达弱化的面向对象的意思,反而是表达对象对于语言的重要性。
那么,在本篇文章中,我会尝试让你去理解面向对象和 JavaScript 中的面向对象究竟是什么。
什么是面向对象?
我们先来说说什么是对象,因为翻译的原因,中文语境下我们很难理解“对象”的真正含义。事实上,Object(对象)在英文中,是一切事物的总称,这和面向对象编程的抽象思维有互通之处。