《JavaScript设计模式》——10.4 适配异类框架

10.4 适配异类框架

“嗯,这是因为咱们公司的整个轻量级的A框架太像jQuery了,我们可以将这两种框架看成是相似框架。但是如果一个框架与jQuery血缘远一点,那么对于这种异类框架适配情况就复杂得多了。举个例子吧,还是实现上面两个事件,所以我写了一个这样的框架。”

// 定义框架
var A = A || {};
// 通过ID获取元素
A.g = function(id){
  return document.getElementById(id)
}
// 为元素绑定事件
A.on = function(id, type, fn){
  // 如果传递参数是字符串则以id处理,否则以元素对象处理
  var dom = typeof id === 'string' ? this.g(id) : id;
  // 标准DOM2级添加事件方式
  if(dom.addEventListener){
    dom.addEventListener(type, fn, false);
  // IE DOM2级添加事件方式
  }else if(dom.attachEvent){
    dom.attachEvent('on' + type, fn);
  // 简易添加事件方式
  }else{
    dom['on' + type] = fn;
  }
}

“那么要完成上面的需求我们可以这样做。”

// 窗口加载完成事件
A.on(window, 'load', function(){
  // 按钮点击事件
  A.on('mybutton', 'click', function(){
    // do something
  })
})

“好了,小白,那么我想引入jQuery来换原有的A库,你知道该如何做么?”

小白思考了一下说:“首先g方法是通过id获取元素,所以通过$(jQuery的简写名称)方法获取jQuery对象然后通过get获取第一个成员即可,不过on方法有些复杂,我们不能直接替换,因为jQuery和我们的A库在通过id获取元素时是有区别的,jQuery的id前面要加#。所以异类框架的适配器应该是这样的吧。”

A.g = function(id){
  // 通过jQuery获取jQuery对象,然后返回第一个成员
  return $(id).get(0);
}
A.on = function(id, type, fn){
  // 如果传递参数是字符串则以id处理,否则以元素对象处理
  var dom = typeof id === 'string' ? $('#' + id) : $(id);
  dom.on(type, fn);
}

“你还是很聪明的。是这样,通过适配器我们发现如果两种框架的‘血缘’比较相近,那么我们适配起来是比较容易的,如果‘血缘’相差甚远我们的适配器写起来要复杂得多,因此你要记住,日后非到万不得已情况下,尽量引入相似框架。”

“是呀,后一种要写不少代码呀。”小白补充说。

时间: 2024-08-03 13:46:05

《JavaScript设计模式》——10.4 适配异类框架的相关文章

常用的Javascript设计模式

<Practical Common Lisp>的作者 Peter Seibel 曾说,如果你需要一种模式,那一定是哪里出了问题.他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案. 不管是弱类型或强类型,静态或动态语言,命令式或说明式语言.每种语言都有天生的优缺点.一个牙买加运动员, 在短跑甚至拳击方面有一些优势,在练瑜伽上就欠缺一些. 术士和暗影牧师很容易成为一个出色的辅助,而一个背着梅肯满地图飞的敌法就会略显尴尬. 换到程序中, 静态语言里可能需要花很多功夫来实现装饰

JavaScript设计模式之观察者模式

设计模式(Design Pattern)对于软件开发来说其重要性不言而喻,代码可复用.可维护.可扩展一直都是软件工程中的追求!对于我一个学javascript的人来说,理解设计模式似乎有些困难,对仅切图.做少量交互效果的FE甚至可能不会用到,但是当你开始使用Angular/Backbone等框架的时候,就无法避免设计模式.MVC/MVVM这些东西了(反正我是伤脑筋). 我学设计模式是刚开始接触编程大概三个月的时候,看一本书<大话设计模式>,里面用C#语言来写,我很无语,因为强类型的编程语言对于

《JavaScript设计模式》——导读

前言 JavaScript设计模式 设计模式是解决软件设计中常见问题的可复用方案.探索任何编程语言时,设计模式都是一个令人兴奋和极具吸引力的话题. 原因之一是:设计模式是许多先前开发人员总结出的经验,我们可以借鉴这些经验进行编程,以确保能够以优化的方式组织代码,为我们解决棘手的问题提供参考. 设计模式还是我们用来描述解决方案的常用词汇.当我们想要向其他人表述一种以代码形式构建解决方案的方式时,描述设计模式比描述语法和语义要简单得多. 在本书中,我们将探讨JavaScript编程语言中经典的与现代

快速构建原型最好用的 10 个 ReactJS UI 框架

本文讲的是快速构建原型最好用的 10 个 ReactJS UI 框架, 我正在探索一些基于 React 的,可以很好的和 React 组件结合起来,并且能直接在你的 React 项目中插入使用的功能丰富的 UI 框架. 下面列举了一些基于 ReactJS 编译的 UI 框架(排名不分先后),希望以下内容的能帮助你快速用 ReactJS 原型实现你的想法: Material UI Material-UI 是基于 Google 的质感设计(Material Design)产生的的一套丰富的 Reac

JavaScript 设计模式与开发实践读书笔记

JavaScript 设计模式与开发实践读书笔记 最近利用碎片时间在 Kindle 上面阅读<JavaScript 设计模式与开发实践读书>这本书,刚开始阅读前两章内容,和大家分享下我觉得可以在项目中用的上的一些笔记. 我的 github 项目会不定时更新,有需要的同学可以移步到我的 github 中去查看源码: https://github.com/lichenbuliren/design-mode-notes 1.currying 函数柯里化 currying 又称 部分求值 .一个 cu

《JavaScript设计模式》——2.3 传宗接代——继承

2.3 传宗接代--继承 "小白,看继承呢?"小铭忙完自己的事情走过来. "是呀,刚才学习类,发现每个类都有3个部分,第一部分是构造函数内的,这是供实例化对象复制用的,第二部分是构造函数外的,直接通过点语法添加的,这是供类使用的,实例化对象是访问不到的,第三部分是类的原型中的,实例化对象可以通过其原型链间接地访问到,也是为供所有实例化对象所共用的.然而在继承中所涉及的不仅仅是一个对象." "对呀,不过继承这种思想却很简单,如千年文明能够流传至今靠的就是传承

为开发者准备的 10 个新鲜的框架 【已翻译100%】

一个框架就是一个软件应用,它可以帮助开发者进行快速设计和开发动态站点.每个月都会有那么几个开发者发布一些五花八门的框架,来使得开发工作更加轻松和高效. 本文中,我们收集了10个新的框架, 其中一些比其它的更为复杂,提供了更多的配置选项,组件,和接口选项.不管怎样,他们使得你可以在站点上创建出更棒的东西.希望你可以找到最适合你的需求的那一款,好好享受吧 !! Famo.us Famo.us是个免费并且开源的JavaScript平台,用来构建手机应用和桌面体验.Famo.us与众不同的一点是它的Ja

《JavaScript设计模式》——2.2 包装明星——封装

2.2 包装明星--封装 2.2.1 创建一个类 "在JavaScript中创建一个类很容易,首先声明一个函数保存在一个变量里.按编程习惯一般将这个代表类的变量名首字母大写.然后在这个函数(类)的内部通过对this(函数内部自带的一个变量,用于指向当前这个对象)变量添加属性或者方法来实现对类添加属性或者方法,例如:" var Book = function(id, bookname, price){ this.id = id; this.bookname= bookname; this

小议javascript 设计模式 推荐_javascript技巧

记得早前就说过要和大家分享"javascript设计模式",迟迟没写不是因为我懒,最近确实太忙,忙工作,忙旅游(啊哦?),好不容易这几天空闲了,接下来是兑现之前空口白话的时间了. 在讨论设计模式之前,请确认您已经有一定的脚本编程基础,如果不甚了解,建议可以先查阅本人很久之前写的这篇<浅谈javascript面向对象编程>请看下一篇文章. 讲到设计模式,不得不先重点着墨于"接口设计",因为接口设计在设计模式中的意义太大了,大于模式本身.直观起见,先介绍一下