/* * 工厂模式 * 需要依赖具体环境创建不同实例 * 处理大量具有相同属性的小对象 * * 比如汽车、不同类型的汽车 * source from: Javascript Patterns page 148 **/function CarMaker() {};// 通用方法CarMaker.PRototype.drive = function () { return "Vroom, I have "+ this.doors + " doors.";};// 定义静态工厂方法CarMaker.factory = function (type) { var constr = type, // 个性化的汽车工厂 newcar = null; // 生产出的car对象 // 如果构造函数不存在,则发生错误 if (typeof CarMaker[constr] !== "function") { throw { name: "Error", message: constr + " does not exist." }; } // 原型继承父类,但仅继承一次 if (typeof CarMaker[constr].prototype.drive !== "function") { CarMaker[constr].prototype = new CarMaker(); } // 创建一个新的实例,并返回 newcar = new CarMaker[constr]; return newcar;};// 定义特定的汽车制造商CarMaker.Compact = function () { this.doors = 4;};CarMaker.SUV = function () { this.doors = 8;};// 应用var compactCar = CarMaker.factory("Compact"), suvCar = CarMaker.factory("SUV");console.log(suvCar.drive()); // Vroom, I have 8 doors.
新闻热点
疑难解答