javascript设计模式之工厂模式示例讲解 |
javaScript工厂方式原始的方式 复制代码 代码如下: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); }; 在上面的代码中,创建对象 car 。然后给它设置几个属性:它的颜色是蓝色,有四个门,每加仑油可以跑 25 英里 。最后一个属性实际上是指向函数的指针,意味着该属性是个方法 。执行这段代码后,就可以使用对象 car 。不过这里有一个问题,就是可能需要创建多个 car 的实例,这显然不是很好的方式 。 解决方案:工厂方法 复制代码 代码如下: function createCar(sColor,iDoors,iMpg) { var oTempCar = new Object; oTempCar.color = sColor; oTempCar.doors = iDoors; oTempCar.mpg = iMpg; oTempCar.showColor = function() { alert(this.color); }; return oTempCar; } var oCar1 = createCar("red",4,23); oCar1.showColor(); //输出 "red" 调用此工厂函数,将创建新对象,并赋予它所有必要的属性,给 createCar() 函数加上参数,即可为要创建的 car 对象的 color、doors 和 mpg 属性赋值 。这使两个对象具有相同的属性,却有不同的属性值 。该方法有个不好的地方在于每创建一个car对象(即调用一次createCar函数)都会重复的为每个对象创建showColor 方法,而这时没有必要的而事实上,每个对象都共享同一个函数 。于是我们尝试在函数之外去声明其方法属性 。 在工厂函数外定义对象的方法 复制代码 代码如下: function showColor() { alert(this.color); } function createCar(sColor,iDoors,iMpg) { var oCar1 = createCar("red",4,23); oCar1.showColor(); //输出 "red" 在上面这段重写的代码中,在函数 createCar() 之前定义了函数 showColor() 。在 createCar() 内部,赋予对象一个指向已经存在的 showColor() 函数的指针 。从功能上讲,这样解决了重复创建函数对象的问题;但是从语义上讲,该函数不太像是对象的方法 。 |