摘要:桥接模式的作用在于将实现部分和抽象部分分离开来, 以便两者可以独立的变化。在实现api的时候, 桥接模式特别有用。比如最开始的singleton的例子.var singleton = function( fn ){ var result; return function(){ ...
阅读全文
01 2015 档案
摘要:桥接模式的作用在于将实现部分和抽象部分分离开来, 以便两者可以独立的变化。在实现api的时候, 桥接模式特别有用。比如最开始的singleton的例子.var singleton = function( fn ){ var result; return function(){ ...
阅读全文
摘要:代理模式的定义是把对一个对象的访问, 交给另一个代理对象来操作.举一个例子, 我在追一个MM想给她送一束花,但是我因为我性格比较腼腆,所以我托付了MM的一个好朋友来送。这个例子不是非常好, 至少我们没看出代理模式有什么大的用处,因为追MM更好的方式是送一台宝马。再举个例子,假如我每天都得写工作日报(...
阅读全文
摘要:去年年前当时正在开发dev.qplus.com, 有个存储应用分类id的js文件, 分类id的结构最开始设计的比较笨重. 于是我决定重构它. 我把它定义成一个json树的形式, 大概是这样:1 var category = { 2 music: { 3 id: 1, 4 children: [...
阅读全文
摘要:观察者模式( 又叫发布者-订阅者模式 )应该是最常用的模式之一. 在很多语言里都得到大量应用. 包括我们平时接触的dom事件. 也是js和dom之间实现的一种观察者模式.1 div.onclick = function click (){ 2 alert ( ''click' ) 3 } ...
阅读全文
摘要:简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况。 说的通俗点,就像公司茶水间的饮料机,要咖啡还是牛奶取决于你按哪个按钮。简单工厂模式在创建ajax对象的时候也非常有用.这个库里提供了...
阅读全文
摘要:《Practical Common Lisp》的作者 Peter Seibel曾说,如果你需要一种模式,那一定是哪里出了问题。他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案。不管是弱类型或强类型,静态或动态语言,命令式或说明式语言、每种语言都有天生的优缺点。一个牙买加运动员...
阅读全文
摘要:如果你想给网页添加点JavaScript的交互性,也许你已经听过JavaScript的事件代理(event delegation),并且觉得这是那些发烧友级别的JavaScript程序员才会关心的什么费解的设计模式之一。事实上,如果你已经知道怎么添加JavaScript的事件处理器(event ha...
阅读全文
摘要:这篇来写一个具有依赖的事件模块event。event提供三个方法bind、unbind、trigger来管理DOM元素事件。event依赖于cache模块,cache模块类似于jQuery的$.data方法。提供了set、get、remove等方法用来管理存放在DOM元素上的数据。示例实现功能:为页...
阅读全文
摘要:进阶的前面两篇讲述了r.js如何通过命令行把所有的模块压缩为一个js文件或把所有的css压缩为一个css文件。其中包括一些压缩配置参数的使用。但以上两种方式有几个问题1、通过命令手动配置压缩选项显得很呆板2、都仅合并为一个文件对于最后只生成一个文件的库来说,这种方式并无不妥。比如jQuery,它的工...
阅读全文
摘要:一篇来认识下打包工具的paths参数,在入门一中就介绍了require.config方法的paths参数。用来配置jquery模块的文件名(jQuery作为AMD模块时id为“jquery”,但文件名可通过paths配置可以不必是“jquery.js”,而是带有版本的如“jquery-1.7.2.j...
阅读全文
摘要:为了应对日益复杂,大规模的JavaScript开发。我们化整为零,化繁为简。将复杂的逻辑划分一个个小单元,各个击破。这时一个项目可能会有几十个甚至上百个JS文件,每个文件为一个模块单元。如果上线时都是这些小文件,那将对性能造成一定影响。RequireJS提供了一个打包压缩工具r.js来对模块进行合并...
阅读全文
摘要:就在前天晚上RequireJS发布了一个大版本,直接从version1.0.8升级到了2.0。随后的几小时James Burke又迅速的将版本调整为2.0.1,当然其配套的打包压缩工具r.js也同时升级到了2.0.1。此次变化较大,代码也进行了重构,层次更清晰可读。功能上主要变化如下:1,延迟模块的...
阅读全文
摘要:javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解。( function(){…} )()和( function (){…} () )是两种javascript...
阅读全文
摘要:立即执行函数(Immediate Functions)立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行,比如:(function () { alert('watch out!'); }()); 这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行;立即执行函数...
阅读全文
摘要:大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过...
阅读全文
摘要:最近闲下来的时候,稍微想了想这个问题。关于Javascript模块化和命名空间管理【关于模块化以及为什么要模块化】先说说我们为什么要模块化吧。其实这还是和编码思想和代码管理的便利度相关(没有提及名字空间污染的问题是因为我相信已经考虑到模块化思想的编码者应该至少有了一套自己的命名法则,在中小型的站点中...
阅读全文
摘要:这篇文章主要介绍了使用mini-define实现前端代码的模块化管理,十分不错的一篇文章,这里推荐给有需要的小伙伴。mini-define依据require实现的简易的前端模块化框架。如果你不想花时间学习require.js,也不想翻看长篇的cmd/amd规范,那么这个mini-define就是你不...
阅读全文
摘要:在这篇文章中,我将会回顾一下js模块化编程的基础,并且将会讲到一些真的非常值得一提的进阶话题,包括一个我认为是我自创的模式。模块化编程是一种非常常见Javascript编程模式。它一般来说可以使得代码更易于理解,但是有许多优秀的实践还没有广为人知。基础我们首先简单地概述一下,自从三年前Eric Mi...
阅读全文
摘要:这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战。我采用的是一个非常流行的库require.js感兴趣的朋友可以了解下啊我采用的是一个非常流行的库require.js。一、为什么要用require.js?最早的时候,所有Javascript代码都...
阅读全文
摘要:这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块,先想一想,为什么模块很重要?接下来为您详细介绍,感兴趣的朋友可以了解下啊。今天介绍如何规范地使用模块。七、模块的规范先想一想,为什么模块很重要?因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载...
阅读全文
摘要:模块化是一种将系统分离成独立功能部分的方法,可将系统分割成独立的功能部分,严格定义模块接口、模块间具有透明性如今backbone、emberjs、spinejs、batmanjs 等MVC框架侵袭而来。CommonJS、AMD、NodeJS、RequireJS、SeaJS、curljs等模块化的Ja...
阅读全文
摘要:Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块但是,Javascript不是一种模块化编程语言,它不支持类class,更遑论模块module了随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越...
阅读全文
摘要:我们再一次被计算机的名词,概念笼罩。backbone、emberjs、spinejs、batmanjs等MVC框架侵袭而来。CommonJS、AMD、NodeJS、RequireJS、SeaJS、curljs等模块化的JavaScript扑面而来。模块化JavaScript的概念尤为强烈,似乎有赶超...
阅读全文
摘要:上一篇是把整个jQuery库作为一个模块。这篇来写一个自己的模块:选择器。为演示方便这里仅实现常用的三种选择器id,className,attribute。RequireJS使用define来定义模块。新建目录结构如下这次新建了一个子目录js,把main.js和selctor.js放入其中,requ...
阅读全文
摘要:1.选择器匹配: regId = /^#[\w\-]+/, regCls = /^([\w\-]+)?\.([\w\-]+)/, regTag = /^([\w\*]+)$/, regNodeAttr = /^([\w\-]+)?\[...
阅读全文
摘要:RequireJS会让你以不同于往常的方式去写JavaScript。你将不再使用script标签在HTML中引入JS文件,以及不用通过script标签顺序去管理依赖关系。当然也不会有阻塞(blocking)的情况发生。好,以一个简单示例开始。新建一个目录,结构如下目录r1下有index.html、j...
阅读全文
摘要:JavaSript模块化在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理。模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式。可以想象一个巨...
阅读全文
摘要:最近在写一个Javascript的框架,刚把DOMContentLoaded事件封装好,略带小兴奋,把开发过程中遇到的原理和兼容性问题做篇笔记,省的忘记到处找。我们在写js代码的时候,一般都会添加window.onload事件,主要是为了在DOM加载完后可以使用getElementById,getE...
阅读全文
摘要:1.缩短首屏时间?模块化。base模块先加载,然后异步加载其他各模块。2.用domContentLoaded代替onLoaded。
阅读全文
摘要:1.引入dojo.jsdojo的发行包里有4个子目录,要引入的文件是名叫"dojo"的子目录里的dojo.js。 假设你是这样的目录结构:project | +--dojo-lib | | | +--dijit | +--dojo | +--dojox | +--util | +--dojo_hel...
阅读全文
摘要:Hello World! 的时间到了,在你所学过的众多语言中,哪个不是从此学起的呢?但在此之前,我们要先构建一个开发环境,如同刚开始学习Java的时候,还是需要我们先安装JDK、配置好环境变量等等,HelloWorld才会乖乖的显示在命令行上。 对于脚本类语言,开发环境就是文本编辑器+语言包(do...
阅读全文
摘要:Dojo是一个强大的面向对象JavaScript框架。主要由三大模块组成:Core、Dijit、DojoX。Core提供Ajax,events,packaging,CSS-based querying,animations,JSON等相关操作API。Dijit是一个可更换皮肤,基于模板的WEB UI...
阅读全文
摘要:1.概述CommonJS是服务器端模块的规范,Node.js采用了这个规范。根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性。global.warning = true;上面代...
阅读全文
|