何时使用工厂模式? Factory模式主要在以下场景使用: 1.当对象或组件涉及高复杂性时 2.当需要根据所在的不同环境轻松生成对象的不同实例时 3.当处理很多共享相同属性的小型对象或组件时 Constructor(构造器)模式 ECMAScript 中可以采用构造函数(构造方法)可用来创建特定的对象。 该模式正好可以解决以上的工厂模式无法识别对象实例的问题。 复制代码 代码如下: <script type="text/javascript"> function Car(model,year,miles){//构造函数模式 this.model = model; this.year = year; this.miles = miles; this.run = function () { return this.model + " has done " + this.miles + "miles"; } } var Benz = new Car("Benz",2014,20000); var BMW = new Car("BMW",2013,12000); alert(Benz instanceof Car); //很清晰的识别他从属于 Car,true console.log(Benz.run()); console.log(BMW.run()); </script>
使用构造函数的方法 ,即解决了重复实例化的问题 ,又解决了对象识别的问题,该模式与工厂模式的不同之处在于: 1.构造函数方法没有显示的创建对象 (new Object()); 2.直接将属性和方法赋值给 this 对象; 3.没有 renturn 语句。 构造函数的方法有一些规范: 1.函数名和实例化构造名相同且大写, (PS:非强制,但这么写有助于区分构造函数和 普通函数); 2.通过构造函数创建对象,必须使用 new 运算符。 既然通过构造函数可以创建对象,那么这个对象是哪里来的, new Object()在什么地方执行了?执行的过程如下: 1.当使用了构造函数,并且 new 构造函数(),那么就后台执行了 new Object(); 2.将构造函数的作用域给新对象 ,(即 new Object()创建出的对象),而函数体内的 this 就 代表 new Object()出来的对象。 3.执行构造函数内的代码; 4.返回新对象(后台直接返回)。 带原型的Constructor(构造器) js中有一个名为prototype的属性。调用js构造器创建一个对象后,新对象就会具有构造器原型的所有属性。通过这种方式,可以创建多个Car对象,并访问相同的原型。 复制代码 代码如下: <script type="text/javascript"> function Car(model,year,miles) { this.model = model; this.year = year; this.miles = miles; } Car.prototype.run = function () { return this.model + " has done " + this.miles + " miles "; }; var Benz = new Car("S350",2010,20000); var Ford = new Car("Ford",2012,12000); console.log(Benz.run());//"S350 has done 20000 miles " console.log(Ford.run()); </script>