- 通常认为,js是面向过程模型的语言,不少前端开发者,也偏向以面向过程的方式编写代码,其实在ECMA中是这样定义过对象(object)的,“属性的无序集合,每一个属性存放一个原始值、对象或函数”。严格来讲,这意味着对象是无特定顺序的值的数组。其中的属性或方法都有一个名字,根据这个名字能够访问相映射的值(值能够是基本值/对象/方法)。
- 在其余的类语言中,对象实际上是基于模板来建立的,经过定义一个类做为对现实的抽象,而后由类来实例化对象;而在原型语言(好比js)中,对象是以经过克隆另外一个对象的方式建立,被克隆的母体称为原型对象。
建立对象的几中方式:
1.工厂模式
前端
2.构造函数式数组

3.原型模式函数

4.构造函数及原型模式的组合式spa

几种方式的对比
1.工厂模式设计
- 能够传递参数,但缺点是没法识别对象类型,由于建立对象都是使用Object的原生构造函数来完成的。
2.构造函数式对象
- 缺点是在建立对象时,特别针对对象的属性指向函数时,会重复的建立函数实例。
3.原型模式blog
- 缺点是省略了为构造函数传递初始化参数,这在必定程序带来不便;另外,最主要是当对象的属性是引用类型时,它的值是不变的,老是引用同一个外部对象,全部实例对该对象的操做都会其它实例。
4.构造函数及原型模式的组合式图片
- 最为经常使用的定义类型方式,结合构造函数模式与原型模式的优势。构造函数模式用于定义实例的属性,而原型模式用于定义方法和共享的属性。结果,每一个实例都会有本身的一份实例属性的副本,但同时又共享着对方方法的引用,最大限度的节约内存。此外,组合模式还支持向构造函数传递参数,可谓是集两家之所长。
注:以上内容参考《JavaScript 高级程序设计》ip