位置: 编程技术 - 正文

JavaScript 设计模式 安全沙箱模式(js设计模型)

编辑:rootadmin

命名空间   JavaScript本身中没有提供命名空间机制,所以为了避免不同函数、对象以及变量名对全局空间的污染,通常的做法是为你的应用程序或者库创建一个唯一的全局对象,然后将所有方法与属性添加到这个对象上。 代码清单1 : 传统命名空间模式   在这段代码中,你创建了一个全局对象MYAPP,并将其他所有对象、函数作为属性附加到MYAPP上.   通常这是一种较好的避免命名冲突的方法,它被应用在很多项目中,但这种方法有一些缺点。   1.需要给所有需要添加的函数、变量加上前缀。   2.因为只有一个全局对象,这意味着一部分代码可以肆意地修改全局对象而导致其余代码的被动更新。   全局构造器   你可以用一个全局构造器,而不是一个全局对象,我们给这个构造器起名为Sandbox(),你可以用这个构造器创建对象,你还可以为构造器传递一个回调函数作为参数,这个回调函数就是你存放代码的独立沙箱环境。 代码清单2:沙箱的使用   让我们给沙箱添加点别的特性   1.创建沙箱时可以不使用'new'操作符   2.Sandbox()构造器接受一些额外的配置参数,这些参数定义了生成对象所需模块的名称,我们希望代码更加模块化。   拥有了以上特性后,让我们看看怎样初始化一个对象。   代码清单3显示了你可以在不需要‘new'操作符的情况下,创建一个调用了'ajax'和'event'模块的对象. 代码清单3:以数组的形式传递模块名 代码清单4:以独立的参数形式传递模块名   代码清单5显示了你可以把通配符'*'作为参数传递给构造器,这意味着调用所有可用的模块,为了方便起见,如果没有向构造器传递任何模块名作为参数,构造器会把'*'作为缺省参数传入. 代码清单5:调用所用可用模块   代码清单6显示你可以初始化沙箱对象多次,甚至你可以嵌套它们,而不用担心彼此间会产生任何冲突. 代码清单6:嵌套的沙箱实例   从上面这些示例可以看出,使用沙箱模式,通过把所有代码逻辑包裹在一个回调函数中,你根据所需模块的不同生成不同的实例,而这些实例彼此互不干扰独立的工作着,从而保护了全局命名空间。   现在让我们看看怎样实现这个Sandbox()构造器.   添加模块   在实现主构造器之前,让我们看看如何向Sandbox()构造器中添加模块。   因为Sandbox()构造器函数也是对象,所以你可以给它添加一个名为'modules'的属性,这个属性将是一个包含一组键值对的对象,其中每对键值对中Key是需要注册的模块名,而Value则是该模块的入口函数,当构造器初始化时当前实例会作为第一个参数传递给入口函数,这样入口函数就能为该实例添加额外的属性与方法。   在代码清单7中,我们添加了'dom','event','ajax'模块。 代码清单7:注册模块   实现构造器   代码清单8描述了实现构造器的方法,其中关键的几个要点:   1.我们检查this是否为Sandbox的实例,若不是,证明Sandbox没有被new操作符调用,我们将以构造器方式重新调用它。   2.你可以在构造器内部为this添加属性,同样你也可以为构造器的原型添加属性。   3.模块名称会以数组、独立参数、通配符‘*'等多种形式传递给构造器。   4.请注意在这个例子中我们不需要从外部文件中加载模块,但在诸如YUI3中,你可以仅仅加载基础模块(通常被称作种子(seed)),而其他的所有模块则会从外部文件中加载。   5.一旦我们知道了所需的模块,并初始化他们,这意味着调用了每个模块的入口函数。   6.回调函数作为参数被最后传入构造器,它将使用最新生成的实例并在最后执行。 代码清单8:实现Sandbox构造器 原文来自:Stoyan Stefanov - JavaScript Patterns Part 7:The Sandbox Pattern

推荐整理分享JavaScript 设计模式 安全沙箱模式(js设计模型),希望有所帮助,仅作参考,欢迎阅读内容。

JavaScript 设计模式 安全沙箱模式(js设计模型)

文章相关热门搜索词:js 设计模式,js的设计模式,js设计模式有什么用,JAVASCRIPT设计模式与开发实践,js的设计模式,js 设计模式,js 设计模式,js 设计模式,内容如对您有帮助,希望把文章链接给更多的朋友!

javascript 类和命名空间的模拟代码 先上一段最简单的://以下几行代码展示了命名空间、类、以及函数的模拟定义和使用:NameSpace={};NameSpace.Class=function(){this.Method=function(info){alert(info);}};ne

js创建对象的几种常用方式小结(推荐) 第一种模式:工厂方式varlev=function(){return"积木网";};functionParent(){varChild=newObject();Child.name="脚本";Child.age="4";Child.lev=lev;returnChild;};varx=Parent();alert(x.name);aler

关于JavaScript定义类和对象的几种方式 可以看看这个例子:vara='global';(function(){alert(a);vara='local';})();大家第一眼看到这个例子觉得输出结果是什么?‘global'?还是‘local'?其实都不是,输出

标签: js设计模型

本文链接地址:https://www.jiuchutong.com/biancheng/385735.html 转载请保留说明!

上一篇:javscript对象原型的一些看法(js object的原型)

下一篇:javascript 类和命名空间的模拟代码(javascript命名规范)

  • 增值税申报怎么填写报表
  • 转让股份的印花税怎么交
  • 房地产企业销售现房是否预缴增值税
  • 所得税汇算清缴调整项目
  • 专利年费滞纳金计入什么科目
  • 银行承兑汇票提前承兑收多少手续费
  • 固定资产中的动态投资包括
  • 其他个人出租不动产
  • 印花税不计入应交税科目吗?
  • 企业购买理财都需先交税再提现吗
  • 收入入账会计分录
  • 当月开票没有收到钱
  • 备用金每个月可以用几次
  • 会计成本核算工作内容
  • 合并会计报表长期股权投资
  • 全额计提坏账符合的条件
  • 用友软件冲销凭证是什么意思
  • 一般纳税人开3个点的票不能抵扣进项
  • 已抵扣进项税额的购进货物或者应税劳务
  • 股权转让 分期付款
  • 补计提以前年度增值税
  • 资产负债表日是什么意思
  • 报税报错了怎么办?
  • 总账会计需要做账吗
  • 交强险 收费
  • 盈余公积转增实收资本要交税吗
  • mac怎么查询是不是正品
  • 超标的业务招待费属于什么差异
  • 社保公积金代缴
  • 一般纳税人纳税申报表
  • 未开票收入跨年度如何申报冲回
  • 苹果紧急提醒
  • linux中添加用户和组的操作
  • 享受企业所得税优惠政策的农产品初加工范围
  • 苏门答腊岛海岸线多少
  • 矿产资源补偿费与采矿权价款区别
  • 应收账款占用资金的应计利息变动额
  • 基于深度学习的车型识别系统(Python+清新界面+数据集)
  • 论文导读怎么做
  • 应收账款与企业价值的关系
  • 没有计提坏账如何披露
  • 资产负债所有者权益借贷方向
  • 什么叫现金流量表举例说明
  • 本期应补退税额就是交钱吗
  • 化粪池承包合同
  • 工会经费计提比例0.8%
  • 可供出售金融资产属于什么科目
  • 无形资产的有效期限与法定保护期限相等
  • 国外佣金代扣代缴增值税可以抵扣吗
  • 房屋预售收入
  • 餐饮企业原材料采购描述错误的是
  • 库存和结存
  • 购进生产车间增值税税率
  • 成本费用率计算公式中包含税金及附加吗
  • 微软和苹果是什么关系
  • ubuntu怎么设置开机自启动程序
  • 组策略怎么用
  • linux 添加swap
  • linux route -n命令结果详解
  • 蓝屏代码bad_system_config_info
  • ubuntu20.04软件中心
  • 开机记事本自动打开
  • win7系统开机出现英文字母
  • win8microsoft账户
  • ps是什么文件
  • win10mobile下载官网
  • Android游戏开发教程
  • Javascript WebSocket使用实例介绍(简明入门教程)
  • nginx日志路径配置
  • linux安装oracle数据库步骤
  • jquery-easyui-1.3.3
  • JAVAscript字符串类型单引号和双引号意一样吗
  • 动感相册模板
  • 拆迁户契税减免政策去哪里办理
  • 车船税完税凭证去哪里打印
  • 税友核心价值观
  • 山东省地税局电话号码
  • 青岛税务局局长是什么级别?
  • 湖北国家税务局发票查询
  • 青岛市崂山区地税局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设