代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title></title><script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script><script type="text/javascript" >//不同的question内相同的操作//不同的question只覆盖my.renderInput//被不同的具体question类调用
        function questionCreator(spec, my) {var that = {};my = my || {};my.label = spec.label;my.renderInput = function () {throw "not implemented";};that.render = function (target) {var questionWrapper = document.createElement('div');questionWrapper.className = 'question';var questionLabel = document.createElement('div');questionLabel.className = 'question-label';var label = document.createTextNode(spec.label);questionLabel.appendChild(label);var answer = my.renderInput();questionWrapper.appendChild(questionLabel);questionWrapper.appendChild(answer);return questionWrapper;};return that;}//下拉框类
        function choiceQuestionCreator(spec) {var my = {},that = questionCreator(spec, my);my.renderInput = function () {var input = document.createElement('select');var len = spec.choices.length;for (var i = 0; i < len; i++) {var option = document.createElement('option');option.text = spec.choices[i];option.value = spec.choices[i];input.appendChild(option);}return input;};return that;}//输入文本框类
        function inputQuestionCreator(spec) {var my = {},that = questionCreator(spec, my);my.renderInput = function () {var input = document.createElement('input');input.type = 'text';return input;};return that;}var view = {render: function (target, questions) {for (var i = 0; i < questions.length; i++) {target.appendChild(questions[i].render());}}};//这里的questions是一个方法数组 //其实这个方法组里面返回的也是对象var questions = [choiceQuestionCreator({label: 'Have you used tobacco products within the last 30 days?',choices: ['Yes', 'No']}), inputQuestionCreator({label: 'What medications are you currently using?'})];$(function () {var questionRegion = document.getElementById('questions');view.render(questionRegion, questions);});</script>
</head>
<body>
问题:
<div id="questions"></div>
</body>
</html>

界面:

html代码:

开始看以为是继承,类似简单工厂模式

其实是调用

http://www.cnblogs.com/TomXu/archive/2012/01/09/2306329.html

JavaScript 开闭原则OCP相关推荐

  1. 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software ...

  2. 设计原则:开闭原则(OCP)

    1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...

  3. 设计一个扩展自抽象类geometricobject的新的triangle类_面向对象设计原则之开放封闭原则(开闭原则OCP)...

    (1) 定义 一个软件实体(类.模块.函数等),对于扩展是开放的,对于更改是封闭的. 对于扩展是开放的:这意味着模块的行为是可以扩展的.当应用的需求发生改变时,我们可以对模块进行扩展,比如增加新的类或 ...

  4. 设计原则(一)开-闭原则(OCP)

    经典力学的基石是牛顿三大定律.而面向对象的可复用设计的第一块基石,便是所谓的"开-闭"原则(Open-Closed Principle,常缩写为OCP). 一.什么是开闭原则 &q ...

  5. 设计模式-开闭原则(OCP)

    开闭原则(open closed principle) 目标:已有的场景下,对于需要拓展的进行开放,拒绝直接的功能修改 需求: 吃鸡游戏要高亮 + LOL需要弹出折扣 // sprint1 - 青年节 ...

  6. [设计原则] 六大设计原则之“开闭原则”

    [设计原则] 六大设计原则之"开闭原则" 目录 [设计原则] 六大设计原则之"开闭原则" 什么是开闭原则 为什么使用开闭原则 如何使用开闭原则 注意事项 总结 ...

  7. 面向对象设计原则——开闭原则

    第一次听说开闭原则的时候,感觉很高大尚很深奥,真正了解之后,发现,原来是这个意思 开闭原则OCP(Open Closed Principle):对扩展开放,对修改关闭 开闭原则对软件测试来说,只需要测 ...

  8. 漫谈面向对象基石之开闭原则(OCP)(转)

    原帖地址: http://www.cnblogs.com/yukaizhao/archive/2010/06/29/ood-ocp.html 开闭原则的意思是软件实体应该对扩展开发,对修改关闭(Sof ...

  9. 软件设计原则(一)开闭原则(Open-Closed Principle, OCP)

    狭义理解:对扩展开发,对修改封闭 在学习设计模式之前,应该先对软件设计原则有一定的了解,设计模式在一定程度上是迎合软件设计原则而产生的,脱离了软件设计原则,设计模式是没有意义的. 开-闭原则(Open ...

最新文章

  1. 第五天2017/04/06(下午3:静态链接库(Lib))
  2. Python爬取猪肉价格网并获取Json数据
  3. web service design time table
  4. js中的Object.create(null) 和 {} 的区别
  5. 1-3docker commit定制镜像
  6. Boost.Asio取消异步操作
  7. 企业分布式微服务云SpringCloud SpringBoot mybatis (八)消息总线(Spring Cloud Bus)
  8. opencv使用trackbar调控美颜程度
  9. secsetupwizard以停止,三星手机恢复出厂设置之后,出现SecSetupWizard已停止的错误...
  10. HDB3码和AMI码通过Matlab实现编码和解码
  11. 三星android 截图,三星手机如何截图?几种三星手机截屏的方法教程
  12. 易企秀如何生成图片_易企秀如何制作圆形照片
  13. 解决阿里云ESC启动kube-proxy服务时出现错误 亲测有效
  14. VSCode改主题背景
  15. 基带、射频,到底是什么?
  16. 转图精灵算法分析!!
  17. VINS-Mono之后端非线性优化 (目标函数中视觉残差和IMU残差,及其对状态量的雅克比矩阵、协方差递推方程的推导)
  18. 阿里云ecs服务器(Ubuntu)配置图形界面并远程桌面连接
  19. R语言glm函数构建二分类logistic回归模型、epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值
  20. 微信开发者小程序项目拉取与推送

热门文章

  1. 计算机图形学大几学的,计算机图形学大作业-WenhaoYu.PDF
  2. 密文恢复出明文的过程称为_整流二极管的反向恢复过程图解
  3. datagrid底部显示水平滚动_滚动穿透问题探索
  4. [原创]FOCUS处理系统流程之:大文本文件极速合并(sps文件合并)
  5. 语音合成论文和英伟达撞车,韩国小哥紧急放出全部草稿代码和样本 | 资源帖...
  6. 寒武纪官宣25亿美元估值融资,也有AI芯片公司要被收购了
  7. 1亿中国人已被AI批改过作业
  8. 谷歌推出理解神经网络的新方法SVCCA | NIPS论文+代码
  9. 特斯拉中国工厂2020投产,还可能为完全自动驾驶更新硬件
  10. Quick Switch Virtual Desktop[AutoHotkey]