<script>
var Shop = function () {
this.name = function () { document.write("商店的名字 <br/>"); },
this.local = function () { document.write("商店的位置 <br/>"); }
}; var ToolShop = function () {
ToolShop.convertASThis.constructor.call(this);
this.kind = function () { document.write("卖工具的商店 <br/>"); },
this.time = function () { document.write("工具商店营业时间8:00~16:00 <br/>"); }
}; var PetShop = function () {
PetShop.convertASThis.constructor.call(this);
this.kind = function () { document.write("卖猫狗的商店 <br/>"); },
this.time = function () { document.write("营业时间9:00~15:00 <br/>"); }
}; extend(ToolShop, Shop);
extend(PetShop, Shop); //========================================================= var Fish_ToolShop = function () {
Fish_ToolShop.convertASThis.constructor.call(this);
this.material = function () { document.write("钓鱼所用的材料! <br/>"); };
} var Repair_ToolShop = function () {
Repair_ToolShop.convertASThis.constructor.call(this);
this.material = function () { document.write("修理所用的材料! <br/>"); };
} extend(Repair_ToolShop, ToolShop);
extend(Fish_ToolShop, ToolShop); //========================================================= //智能工厂,动态实例化商店
var ShopFactory = {
Init: function (shopName) {
var tmpObj = eval("new " + shopName + "();");
return tmpObj;
}
}; //========================================================= //不同的工具商店可能存在多种不同类型的工具,所以存在一个商店的父类但是不能被实例化,需要在子类中重写
var FatherToolShop = function () {
this.sellTool = function (kind) {
throw new Error('this is a abstract class');
};
}; //这个对象继承FatherToolShop后重写sellTool来来进行实例
var OtherToolShop = function () { };
extend(OtherToolShop, FatherToolShop); //继承之后将原型链中的sellTool方法重写
OtherToolShop.prototype.sellTool = function (kind) {
var kind = kind;
var kinds = ["Repair_ToolShop", "Fish_ToolShop"]; for (var v in kinds) {
if (kinds[v] == kind) {
kind = ShopFactory.Init(kind);
kind.kind(); //工具商店
kind.time(); //营业时间
break;
}
}
return kind;
}; //========================================================= var test = new OtherToolShop();
test.sellTool("Repair_ToolShop").material();
test.sellTool("Fish_ToolShop").material();
</script>

  

JS "eval智能" 工厂模式的更多相关文章

  1. JS设计模式--简单工厂模式

    在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量). 工厂模式就是一种有助于消除两个类依赖性的模式. 工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式. 简单工 ...

  2. [JS设计模式]:工厂模式(3)

    简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...

  3. JS设计模式之工厂模式

    1 什么是工厂模式? 工厂模式是用来创建对象的一种最常用的设计模式.我们不暴露创建对象的具体逻辑,而是将将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂.工厂模式根据抽象程度的不同可以分为: ...

  4. JS面向对象之工厂模式

    js面向对象 什么是对象 "无序属性的集合,其属性可以包括基本值.对象或者函数",对象是一组没有特定顺序的的值.对象的没个属性或方法都有一个俄名字,每个名字都映射到一个值. 简单来 ...

  5. js设计模式:工厂模式、构造函数模式、原型模式、混合模式

    一.js面向对象程序 var o1 = new Object();     o1.name = "宾宾";     o1.sex = "男";     o1.a ...

  6. js简单的工厂模式

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  7. JS中的工厂模式

    .一个栗子: var BicycleShop = function(){}; BicycleShop.prototype = { sellBicycle : function( model ){ va ...

  8. JS设计模式——7.工厂模式(示例-XHR)

    XHR工厂 基本实现 var AjaxHandler = new Interface('AjaxHandler', ['request', 'createXHR']); var SimpleHandl ...

  9. JS设计模式——7.工厂模式(概念)

    工厂模式 本章讨论两种工厂模式: 简单工厂模式 使用一个类(通常是一个单体)来生成实例. 使用场景:假设你想开几个自行车商店(创建自行车实例,组装它,清洗它,出售它),每个店都有几种型号的自行车出售. ...

随机推荐

  1. linux-满足多字符条件统计行数

    测试数据: 2017-10-24 14:14:11:1123 [ INFO] order_type=add,order_id=9150882564978710367790292017-10-24 14 ...

  2. PDF XSS

    漏洞测试: 下面,我们介绍如何把 JavaScript 嵌入到 PDF 文档之中.我使用的是迅捷 PDF 编辑器未注册版本 1.启动迅捷 PDF 编辑器打开一个 PDF 文件,或者使用“创建 PDF ...

  3. iOS开发-VFL初窥

    VFL是苹果为了简化Autolayout的编码而推出的抽象语言,在上一篇博客中我们发现如果使用NSLayoutConstraint来添加约束是非常繁琐的. 一个简单的Frame需要添加四个NSLayo ...

  4. Android开发-- findViewById()方法得到空指针

    如果想通过调用findViewById()方法获取到相应的控件,必须要求当前Activity的layout通过setContentView. 如果你通过其他方法添加了一个layout,如需获取这个la ...

  5. iOS添加自定义字体

    字体有相应的字体文件,一般是以ttf或者otf为后缀,我们可以去一些第三方网站去下载(也有人专门做了字体出售),Google Fonts是个比较好的网站,可以去找找看.我们就用Open Sans这个字 ...

  6. QT开发之旅二TCP调试工具

    TCP调试工具顾名思义用来调试TCP通信的,网上这样的工具N多,之前用.NET写过一个,无奈在XP下还要安装个.NET框架才能运行,索性这次用QT重写,发现QT写TCP通信比.NET还要便捷一些,运行 ...

  7. 【WEB前端系列之CSS】CSS3动画之Tranition

    前言 css中的transition允许css的属性值在一定的时间区间内平滑的过渡.这种效果可以在鼠标点击.获得焦点.被点击或对元素任何改变中触发,并圆滑的以动画效果改变CSS的属性值.语法: tra ...

  8. xmlWriter

    MemoryStream msXml = new MemoryStream(); XmlTextWriter xmlWriter = new XmlTextWriter(msXml, Encoding ...

  9. C#设计模式--装饰器模式

    0.C#设计模式-简单工厂模式 1.C#设计模式--工厂方法模式 2.C#设计模式--抽象工厂模式 3.C#设计模式--单例模式 4.C#设计模式--建造者模式 5.C#设计模式--原型模式 6.C# ...

  10. Android ADB命令?这一次我再也不死记了!【简单说】

    https://www.jianshu.com/p/56fd03f1aaae adb的全称为Android Debug Bridge.是android司机经常用到的工具.但是问题是那么多命令写代码已经 ...