一般认为js是面向过程的语言,很多前端开发者也更喜欢以面向过程的方式编写代码。其实在ECMA中对象(object)就是这样定义的。有序集合,每个属性持有一个原始值、对象或函数”。严格来说,这意味着一个对象是一个没有特定顺序的值数组。其中一个属性或方法有一个名称,根据该名称可以访问映射值(值可以是基本值/对象/方法)在其他类语言中,对象实际上是基于模板创建的,通过将类定义为现实的抽象,然后由类实例化对象;而在原型语言(如js)中,创建对象是通过克隆另一个对象来创建的,被克隆的父对象称为原型对象。创建对象的几种方式:1.工厂模式2.构造器模式3.原型模式四、构造函数和原型模式结合的几种方式比较1、工厂模式可以传递参数,但缺点是不能识别对象类型,因为创建对象是使用Object的原生构造函数完成的。2、构造函数的缺点方法是在创建对象时,尤其是当对象的属性指向函数时,会重复创建函数实例。3、原型模式的缺点是省略了为构造函数传递初始化参数,给某些程序带来不便;另外,最重要的是,当对象的属性为引用类型时,其值不变且始终引用同一个External对象,该对象的所有实例操作都将是其他实例。4、构造函数与原型模式相结合是最常用的类型定义方式,结合了构造函数模式和原型模式的优点。构造函数模式用于定义实例的属性,而原型模式用于定义方法和共享属性。这样一来,每个实例都会有自己的实例属性副本,但同时共享对对方方法的引用,最大程度地节省了内存。另外,组合模式还支持给构造函数传递参数,可以说是两者中的佼佼者。注:以上内容参考《JavaScript 高级程序设计》
