那么对象到底是什么呢?其实对象仅仅是一个容器,该容器包含了命名的属性,键值对(大多数)的列表。这里面的属性可以是函数(函数对象),这种情形下我们称其未为方法。
关于创建的对象的另外一件事情是可以在任意时间修改该对象(尽管ECMAScript引入了API来防止突变)。可以对一个对象执行添加、删除和更新它的成员变量。
最后,需要记住的是对象主要有两种类型:原生的(Native,如ECMAScript标准),主机的(Host即宿主的,比如浏览器环境)。另外,原生对象可以进一步分为内置对象(例如数组,日期对象等)和用户自定义对象(如var o = {})等。主机对象包含Windows对象和所有的DOM对象。
没有类
在JavaScript中没有类,我们只处理对象。尽量多使用对象的组合,而不是使用类的继承。这句话的意思是通过已有的对象组合来获取新对象,是比通过很长的父 - 子继承链来创建新的对象更好的一方法。
原型
JavaScript没有继承,尽管这是重用代码的一种方式。可以使用多种方法来实现继承,这里通常使用原型。原型是一个对象,并且创建的每一个都会自动获取一个Prototypes属性,该属性指向一个新的空对象。该对象几乎等同于采用对象字面量或Object()创建的对象,区别在于他的constructor属性指向了所创建的函数,而不是指向内置的Object()函数。可以为该空对象增加成员变量,以后其他对象也可以从该对象继承并像使用自己的属性一样使用该对象的属性。
要记住,每一个函数都有prototype属性,每一个对象都有一个__proto__属性。(先带着疑问,后面的文章会详细解答。)
简单的介绍之后,我又想起了最开始聊过的问题。到底什么是面向对象?到底如何面向对象开发(编程)?
首先要说的是,面向对象与面向对象编程即OOP(Object Oriented Programming)是两回事,个人理解,面向对象是一种描述,我们应该使用怎样的手段去做一件事,而面向对象编程,则是一种方法,也就是说,我们使用面向对象的手段或方法,去进行开发。另外的,还有函数式编程,那我个人理解,函数式编程也是一种方法,我们使用函数式的方法、方式去编程,编写代码。
那么面向对象是什么呢?其实我的理解,就是在一切的编程“沟通”中数据流转的执行方式,我们通过对象的方式,去进行数据的传递及流转,那什么是“对象的方式”,即:类与实例,而js中没有类的概念,那么就要使用到原型。所以,在js中发挥原型的能力,使用原型的能力去编程,就可以大概的理解为是面向对象的编程(当然,要知道,这实际上是很片面的理解)。
希望我的理解没有出现方向性的错误,后面,会详细的介绍原型以及继承的内容。