代码改变世界

随笔分类 - JavaScript

让 JavaScript 轻松支持函数重载 (Part 1 - 设计)

2009-07-02 09:18 by Cat Chen, 7425 阅读, 收藏, 编辑
摘要: JavaScript支持重载吗?JavaScript支持函数重载吗?可以说不支持,也可以说支持。说不支持,是因为JavaScript不能好像其它原生支持函数重载的语言一样,直接写多个同名函数,让编译器来判断某个调用对应的是哪一个重载。说支持,是因为JavaScript函数对参数列表不作任何限制,可以在函数内部模拟对函数重载的支持。实际上,在很多著名的开源库当中,我们都可以看到函数内部模拟重载支持的... 阅读全文

写个 JavaScript 异步调用框架 (Part 6 - 实例 & 模式)

2009-07-01 21:59 by Cat Chen, 3913 阅读, 收藏, 编辑
摘要: 我们用了5篇文章来讨论如何编写一个JavaScript异步调用框架(问题 & 场景、用例设计、代码实现、链式调用、链式实现),现在是时候让我们看一下在各种常见开发情景中如何使用它了。封装Ajax设计Async.Operation的最初目的就是解决Ajax调用需要传递callback参数的问题,为此我们先把Ajax请求封装为Async.Operation。我在这里使用的是jQuery,当然无... 阅读全文

写个 JavaScript 异步调用框架 (Part 5 - 链式实现)

2009-06-30 23:36 by Cat Chen, 3970 阅读, 收藏, 编辑
摘要: 在上一篇文章里面,我们为异步调用框架设计了一种链式调用方式,来增强异步调用队列的代码可读性,现在我们就来编写实现这部分功能的代码。调用入口链式调用存在Async.go方法和Async.chain方法两个入口,这两个入口本质上是一致的,只是Async.chain方法在调用时先不提供初始参数,而Async.go方法在调用时提供了初始参数并启动异步调用链。Async.chain = function()... 阅读全文

写个 JavaScript 异步调用框架 (Part 4 - 链式调用)

2009-05-09 23:46 by Cat Chen, 3666 阅读, 收藏, 编辑
摘要: 我们已经实现了一个简单的异步调用框架,然而还有一些美中不足,那就是顺序执行的异步函数需要用嵌套的方式来声明。现实开发中,要按顺序执行一系列的同步异步操作又是很常见的。还是用百度Hi网页版中的例子,我们先要异步获取联系人列表,然后再异步获取每一个联系人的具体信息,而且后者是分页获取的,每次请求发送10个联系人的名称然后取回对应的具体信息。这就是多个需要顺序执行的异步请求。为此,我们需要设计一种新的操... 阅读全文

写个 JavaScript 异步调用框架 (Part 3 - 代码实现)

2009-05-07 14:54 by Cat Chen, 3534 阅读, 收藏, 编辑
摘要: 在上一篇文章里,我们说到了要实现一个Async.Operation类,通过addCallback方法传递回调函数,并且通过yield方法返回回调结果。现在我们就来实现这个类吧。类结构首先我们来搭一个架子,把需要用到的似有变量都列出来。我们需要一个数组,来保存回调函数列表;需要一个标志位,来表示异步操作是否已完成;还可以学IAsyncResult,加一个state,允许异步操作的实现者对外暴露自定义... 阅读全文

写个 JavaScript 异步调用框架 (Part 2 - 用例设计)

2009-05-07 01:12 by Cat Chen, 4017 阅读, 收藏, 编辑
摘要: 在上一篇文章里说到,我们要设计一个异步调用框架,最好能够统一同步异步调用的接口,同时具体调用顺序与实现方式无关。那么我们现在就来设计这样一个框架的用例。传递回调我们首先要考虑的一个问题是,如何传递回调入口。在最传统的XHR调用当中,回调函数会被作为最后一个参数传递给异步函数:function asyncOperation(argument, callback)在参数相当多的时候,我们可以把参数放到... 阅读全文

写个 JavaScript 异步调用框架 (Part 1 - 问题 & 场景)

2009-05-06 00:18 by Cat Chen, 5291 阅读, 收藏, 编辑
摘要: 问题在Ajax应用中,调用XMLHttpRequest是很常见的情况。特别是以客户端为中心的Ajax应用,各种需要从服务器端获取数据的操作都通过XHR异步调用完成。然而在单线程的JavaScript编程中,XHR异步调用的代码风格实在是与一般的JavaScript代码格格不入。额外参数考虑一个除法函数,如果它是纯客户端的同步函数,那么签名会是这样的:function divide(operand1... 阅读全文

ASP.NET AJAX 4.0 Preview 3 (Part 1 - ADO.NET Data Service Client Library)

2009-03-11 00:18 by Cat Chen, 4141 阅读, 收藏, 编辑
摘要: 自从Microsoft与jQuery合作以来,ASP.NET AJAX与jQuery就被定位为两个互补的AJAX库。既然jQuery已经实现了如此多轻量级的AJAX特性,自然ASP.NET AJAX会继续专注于富客户端所需的一些重量级特性。 在ASP.NET AJAX 4.0 Preview 3里面,开发人员能够接触到的两个重要的新特性就是ADO.NET Data Service Client L... 阅读全文

以服务器端为中心的 ASP.NET AJAX 模式 (Part 2 - Control)

2008-10-30 00:50 by Cat Chen, 4833 阅读, 收藏, 编辑
摘要: 在上一篇文章当中,也就是《以服务器端为中心的 ASP.NET AJAX 模式 (Part 1 - Behavior)》,我们探讨了较为易用的Behavior模式。之所以说它较为易用,是因为它不涉及和原有Page处理流程的交互,即使访问网络也是访问独立的Web Service(包括Page上的[WebMethod]),因此和Page处理流程的设计绝对是正交的。但有时候我们需要的就是与Page处理流程... 阅读全文

以服务器端为中心的 ASP.NET AJAX 模式 (Part 1 - Behavior)

2008-10-26 20:33 by Cat Chen, 4691 阅读, 收藏, 编辑
摘要: 早在ASP.NET AJAX从CTP转向Beta再转向RTM时,看着客户端的Control被逐步放弃,与此同时ASP.NET AJAX Control Toolkit越来越多地使用Behavior,我就想深入说说ASP.NET AJAX的模式。不过由于我比较懒,所以这个话题只在《理想的 ASP.NET AJAX (Part 2 - Server Centric)》中一笔带过,没有深入讨论。今天看到... 阅读全文

如何动态加载 JavaScript 与 CSS

2008-09-02 23:01 by Cat Chen, 10201 阅读, 收藏, 编辑
摘要: Omar AL Zabir这位MVP总是喜欢搞些稀奇古怪同时又很实用的小东西,并且还十分值得参考。最近他就做了一个叫做ensure的小工具用于动态加载JavaScript、CSS与HTML,而且IE、Firefox、Opera、Safari都支持了,那么我们就来看看ensure是如何做到动态加载JavaScript与CSS的。在介绍ensure内部的实现之前,让我们先来看看其功能:ensure({... 阅读全文

编写 iPhone Friendly 的 Web 应用程序 (Part 6 - iUI)

2008-01-07 21:01 by Cat Chen, 4650 阅读, 收藏, 编辑
摘要: iUI是一个针对iPhone Safari的Web开发框架,由Joe Hewitt开发。这位Joe Hewitt曾经参与过Firefox的开发,包括其中的DOM Inspector以及Firebug,后来到了Facebook,为Facebook开发了iPhone专用版本,对iPhone Web开发社区算是作出了巨大贡献。样式我们继续说iUI这个框架。这个框架所做的事情,就是提供iPhone Fri... 阅读全文

编写 iPhone Friendly 的 Web 应用程序 (Part 5 - 交互入门)

2007-12-29 13:41 by Cat Chen, 3744 阅读, 收藏, 编辑
摘要: 我们已经研究过XHTML和CSS了,现在开始看看最后一部分,也就是JavaScript,以及它所提供的交互能力。无AJAX交互第一种我们要看的交互,是完全不使用JavaScript,这其中一个例子就是GMail。GMail的iPhone版其实就是由普通的GMail移动版修改过来的,界面上更贴近桌面版GMail了,然而交互性并没有怎么提高,每一个点击都对应一次刷新,没有任何AJAX可言。事实上,不用... 阅读全文

讲座资源:Silverlight In Action

2007-11-17 22:26 by Cat Chen, 3211 阅读, 收藏, 编辑
摘要: 这是2007年11月17日广州.NET俱乐部活动中Silverlight In Action这一部分的讲座资,其中包括了pptx以及Clock与MediaPlayer两个sample。需要注意的是,为了减少体积,第二个sample里面的SampleVideo.wmv被删除了,如果要让它正常运行起来,你必须手动添加一个SampleVideo.wmv到项目根目录里面去。 对于Silverlight感兴... 阅读全文

不要动态修改 DOM 里面的 id 属性

2007-10-10 15:25 by Cat Chen, 1943 阅读, 收藏, 编辑
摘要: 我不知道是否有什么标准规定不允许修改id属性,或者不建议修改id属性,总之IE对此支持不佳。在IE当中,修改id属性对将来的DOM操作没什么不符合标准的影响,你仍然可以通过document.getElementById()找到该元素,然后在CSS支持上就有问题了,id修改后并不会自动去重新匹配CSS规则,因此id修改后不会体现出应有的样式。 因此,进行DOM编程时应该避免修改id属性,如果需要动态... 阅读全文

理想的 ASP.NET AJAX (Part 2 - Server Centric)

2007-07-31 23:32 by Cat Chen, 4296 阅读, 收藏, 编辑
摘要: 使用ASP.NET的话……ASP.NET的最大优势就是组件化,在UI上更明确地说就是控件化,但这却为AJAX带来了不少问题。首要问题是输出HTML不由我们控制。复杂的GridView不说,我们就来看简单的CheckBox,在你不对它设置任何样式属性和文本时,它是一个单纯的<input />,加上文本的话文本会被放在<label />中以便点击文本与点... 阅读全文

理想的 ASP.NET AJAX (Part 1 - Client Centric)

2007-07-30 22:42 by Cat Chen, 5056 阅读, 收藏, 编辑
摘要: 怎样的AJAX才算是理想? 要说什么是理想的ASP.NET AJAX,就要先说说什么是理想的AJAX。事实上AJAX最不理想的地方在于search engine friendly以及bookmarkable,这两个问题有一定的相似性,要解决并不难,只是每一个系统中实现起来都不一样,因此难以提出一个统一的patterns来解决。 首先说说search engine friendly这一点吧,实际上使... 阅读全文

慎用 XHTML 标签的自关闭写法

2007-06-14 08:15 by Cat Chen, 5927 阅读, 收藏, 编辑
摘要: 我们都知道XHTML里面的img标记应该这样写:<img alt="" src="" />,这种写法也就是所谓的自关闭,在XML中是完全合法的写法。如果你熟悉XML相关的开发,可能也就习惯于这种写法,想着XML中任何不含子节点的元素都可以这样写,那么XHTML中没有内容的标签也都可以这样写。XHTML中理论上当然允许任何标签以自关闭的方法来书写,然而浏览器兼容性却带来了新问题,那就是I... 阅读全文

探索 ASP.NET Futures (Part 3 - Client Diagnostics)

2007-06-12 15:57 by Cat Chen, 4026 阅读, 收藏, 编辑
摘要: 貌似ASP.NET 2.0新增的诊断相关服务没多少人关注,更没多少人用,不过对于正在使用此类服务分析站点的人来说,肯定非常期望ASP.NET AJAX中的客户端代码错误也能记录到诊断日志中,这样就能获取更丰富的数据来分析站点不稳定因素的来源。ASP.NET Futures中已经引入了客户端诊断服务,在解释此服务之前不妨先思考一下假如你要自己写一个客户端诊断服务会怎么做。如果我来写一个客户端诊断服务... 阅读全文

Cat2 模板系列开始预览啦!

2007-05-17 18:38 by Cat Chen, 5285 阅读, 收藏, 编辑
摘要: 什么是Cat2?Cat2 = Cat * Cat,两位Cat合作的意思,也就是我Cat Chen和猫窝的猫影组成的小团队。什么是Cat2模板?这是一个XHTML+CSS+JavaScript的模板系列,暂时只包括blog模板,并且优先提供Blogger与WordPress立即可用的模板,同时也会考虑为其他常见的blog平台(例如DotText)提供立即可用的模板。如何获取Cat2模板?我们的模板存... 阅读全文