部分Dojo常用函数简介(一)——Javascript基础扩展函数

每个Ajax 框架都对Javascript 做了扩展,提供了很多常用函数,增强了 Javascript 的开发效率。在这里将对部分Dojo 中的常用函数做简单的介绍。由于Dojo的常用函数较多,也为方便大家阅读,将这些常用函数分为了五个类别分别进行介绍。本文将介绍第一部分的内容:Javascript基础扩展函数 。

 

* 本系列博文的绝大多数内容来自于对dojocampus.org上的dojo reference guide文档的翻译,在此也特别感谢文档的翻译者们:Fei Jia, Zhu Xiao Wen, Li Wen Bing, Zhang Jun, Hu Kuang, Huang Wei, Wu Min Qi, Mo Ying, Cheng Fu, Zhong Si Qi

dojo.hitch

dojo.hitch是一个优雅的函数。它会返回一个在指定作用域下执行指定语句的函数。通过调用这个函数,你可以很好地控制函数地执行,特别是在涉及到异步操作的时候。 比如下面的例子:

 

 

 

上面的例子无法正确的运行。你只会得到一个语义模糊的错误提示,比如: foo是一些变量未定义的错误。原因是,在如上例这样异步的回调函数中,当你赋给它一个关联表的时候,你改变了 ”foo”的作用域 .它的作用域不再关联到最初生成它的对象, xhr的参数对象上。要解决这个问题,你可以使用 hitch来强制这个函数保留它原来的作用域。正确的写法应该是像这样:

 

 

dojo.hitch需要两个参数,第一个参数指明了函数调用的关联作用域,第二个参数为一个函数对象或第一个对象中的成员函数名。
(注:关于 dojo.xhrGet,请参见后续的 AjaxIO部分)

dojo.partial

你是否想过要控制传递给函数的参数?举例来说,你是否有过这样的需求,设定传递给函数的第一个参数为已定义的值,而其它的参数仍然是可变化的。 dojo提供了一种方式可以满足这种需求。和 dojo.hitch类似, dojo.partial也是一个返回值为函数的函数。它所做的是让你可以用预定义的值锁定函数的前几个参数。这是一个非常强大的功能,特别是当你需要传入对象引用或者其它类似的给数据存储的通知函数。

下面就是一个使用 partial的示例:

 

 

那么,当 xhrGet函数返回的时候它会调用 dataLoaded函数 ,但是 xhrGet的 load函数期待的参数结构应该是: load(data, ioargs)。那么在 dataLoaded的第一个参数已经确定为 "someFirstParam"的情况下,我们如何去保证 xhrGet对于参数的要求能得到满足 ?对,使用 dojo.partial!看看你可以如何用 dojo.partial来做:

 


它所做的是创建一个新的函数,这个函数封装了 dataLoaded函数并且指定了第一个参数 "firstValue"。需要注意的是, dojo.partial允许你指定多个参数,因此你可以定义任意数量的参数作为函数固定前置的参数。

dojo.isString, dojo.isArray, dojo.isFunction, dojo.isObject, dojo.isArrayLike, dojo.isAlien

顾名思义,这几个函数都是用来判断给定的参数是否是特定的类型,是的话返回 true,否则返回 false。

dojo.isString:判断给定参数是否是字符串

dojo.isArray:判断一个对象是不是一个真正的数组。注意, dojo.isArray检查的是所传的值是不是由当前框架 (frame)里的 Array构造函数所创建的实例。如果一个数组来自于一个不同的框架,它就不是当前框架的数组,所以 dojo.isArray会返回 false。另外, arguments对象并不是一个数组。你可以用 dojo.isArrayLike(value)来检测这些类似数组的对象。

dojo.isFunction: 检查所传参数是不是一个函数对象。注意,这对于由dojo.declare 所创建的类(的构造函数)也一样有效。一个常见的模式是,得到一个字符串形式的类名全称,你可以用 dojo.isFunction来判断是否需要将其转换为一个函数:

 

 


当然,你也可以用dojo.isString 来做类似的事情。

dojo.isAlien用于检查所传参数是不是一个内建函数。

dojo.isObject用于检查所传参数是不是一个对象。

 

以上就是部分Dojo对于JavaScript的基础扩展函数,在下一部分中,会介绍Dojo对面向对象(OO)及包机制(package system)部分的一些常用函数。

posted on 2010-10-30 11:57  springside5  阅读(155)  评论(0编辑  收藏  举报