js工厂模式
设计工厂模式是为了创建对象。通常在类或者类的静态方法中实现,具有两个目标。其中一个是:当创建相似对象时执行重复操作:
另外一个目标是:编译时不知道具体类型(类)的情况下,为工厂客户提供一种创建对象的接口。
实现如下:
//父构造器
function CarMaker(){}
//在原型中添加共享的方法
CarMaker.prototype.drive = function(){
return "Vroom, I have "+ this.doors + " doors";
};
//静态工厂方法
CarMaker.factory = function(type){
var constr = type,
newcar;
//如果构造函数不存在,则发生错误
if(typeof CarMaker[constr] !== "function"){
throw {
name:"error",
message:constr + " doesn't exit"
};
}
//使得原型继承父类,仅继承了一次
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.Convertible = function(){
this.doors = 1;
};
CarMaker.SUV = function(){
this.doors = 17;
};
//test
var compact = CarMaker.factory("Compact");
var convertible = CarMaker.factory("Convertible");
var suv = CarMaker.factory("SUV");
console.log(compact.drive()); //Vroom, I have 4 doors
console.log(convertible.drive()); //Vroom, I have 1 doors
console.log(suv.drive()); //Vroom, I have 17 doors
js工厂模式的更多相关文章
- JS工厂模式开发实践
JS工厂模式开发实践 基于JS工厂模式的H5应用,实现了轮播图功能与滑屏功能,并且实现了文字大小的自适应功能,基于SASS样式开发. 核心的JS代码如下: index.js define(functi ...
- js 工厂模式、简单模式、抽象模式
简单工厂模式又称为静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类的对象.其实,工厂模式的思想主要是将相同/相似的的对象或类进行提取归类,这样的话,就可以避免写太多重复性 ...
- js 工厂模式简要介绍
什么是工厂模式?就好比一个工厂,能造汽车.飞机...,通过对外接口,由顾客决定,来定制哪一款产品. 在js内表现为,一个工厂函数/对象,包含汽车.飞机等子类,提供对外接口,根据参数返回不同子类的实例 ...
- js创建对象的三种方式和js工厂模式创建对象
文章地址: https://www.cnblogs.com/sandraryan/ 创建对象 创建对象的三种方式 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象 1. 调用系统的构造函数 ...
- js工厂模式和构造函数
<!DOCTYPE html><html><head> <title>工厂模式和构造函数</title> <meta charset ...
- JS 工厂模式
1.什么是工厂模式 工厂模式是面向对象的设计模式,作用在于创建一个对象,mixin模式也是面向对象的设计模式,作用在于继承. 工厂模式定义一个接口,让实现这个接口的类来决定实例化哪个类,也就是说通过一 ...
- js面向对象(对象/类/工厂模式/构造函数/公有和原型)
https://www.cnblogs.com/sandraryan/ 什么是对象 js中一切都是对象(有行为和特征).js允许自定义对象,也提供了内建对象(string date math等) 对象 ...
- JS设计模式--简单工厂模式
在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量). 工厂模式就是一种有助于消除两个类依赖性的模式. 工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式. 简单工 ...
- js对于工厂模式的理解
有很多人对工厂模式有着这样或者那样不理解的地方,今天我就和大家分享一下我的心得. 其实工厂模式是基于面向对象的一种模式.大家先看这样的一段代码: 其实这个程序很简单,学过js的人都会写,基本没什么问题 ...
随机推荐
- Hadoop学习历程(四、运行一个真正的MapReduce程序)
上次的程序只是操作文件系统,本次运行一个真正的MapReduce程序. 运行的是官方提供的例子程序wordcount,这个例子类似其他程序的hello world. 1. 首先确认启动的正常:运行 s ...
- CFLAGS/CPPFLAGS/CXXFLAGS in Makefile介绍
先来看一张关于Makefile中的常见预定义变量. CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项.这两个变量实际上涵盖了编译和汇编两个步骤.大多数程序和库 ...
- Sogou搜狗搜索引擎登录网站 - Blog透视镜
Sogou搜狗是中国搜狐旗下的搜索引擎,其登录方式也很简单,只要输入网址,验证码即可,不需要注册账号,再进行登录,其他非 * 必填的字段,可留下空白不填,验证码只有4码,也很清晰可见,不像有的网站,即 ...
- IC卡接口芯片TDA8007的读写器设计
摘要:阐述T=0传输协议,给出IC卡读写器中使用的IC卡APDU指令流程和原理框图:重点介绍其中的IC卡接口芯片Philips的TDA8007,给出通过TDA8007对CPU IC卡上下电过程.具体程 ...
- smarty 内置函数if 等判断
{if},{elseif},{else} Smarty的{if}条件判断和PHP的if 非常相似,只是增加了一些特性. 每个{if}必须有一个配对的{/if}. 也可以使用{else} 和 {else ...
- codility上的问题 (19)Sigma 2012
题目: 像最大直方图一样给定一个数组是每个单位长度上的高度,求至少几个矩形可以拼出这个形状. 例如:给出的数组 H[0] = 8 H[1] = 8 H[2] = 5 H[3] = 7 H[4] = 9 ...
- 开机启动tomcat
windows: 成功之后在dos窗口键入 service.bat install Tomcat 输完然后按Enter键,出现如下窗口,便成功了. 进入windows服务管理,设成是自动的. #chk ...
- 【转】Android开源项目发现---ListView篇(持续更新)
原文网址:http://blog.csdn.net/krislight/article/details/20211045 资料转载地址:https://github.com/Trinea/androi ...
- chrome加载本地js
通过chrome的扩展功能,可以执行一些本地脚本. 1.如何添加扩展程序 具体做法是:chrome -> 设置 -> 扩展程序 -> 加载正在开发的扩展程序 图(1.1) 图(1.2 ...
- thinkphp连接mysql5.5版本数据库
//数据库配置信息 'DB_TYPE' => 'mysqli', // 数据库类型 'DB_HOST' => 'localhost', // 服务器地址 'DB_NAME' => ' ...