诛仙手游360版:部分Dojo常用函数简介(一)——Javascript基础扩展函数 - Dojo中文博客 ...

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 18:04:12
  部分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 Qidojo.hitch
dojo.hitch是一个优雅的函数。它会返回一个在指定作用域下执行指定语句的函数。通过调用这个函数,你可以很好地控制函数地执行,特别是在涉及到异步操作的时候。 比如下面的例子:view plaincopy to clipboardprint?
01.var myObj = {   
02.    foo: "bar",   
03.    method: function(someArg){   
04.        console.log(this.foo+" "+data);   
05.    }   
06.};   
07.dojo.xhrGet({   
08.    url: "/something.php",   
09.    load: myObj.method   
10.}); 
var myObj = {
    foo: "bar",
    method: function(someArg){
        console.log(this.foo+" "+data);
    }
};
dojo.xhrGet({
    url: "/something.php",
    load: myObj.method
});
 上面的例子无法正确的运行。你只会得到一个语义模糊的错误提示,比如: foo是一些变量未定义的错误。原因是,在如上例这样异步的回调函数中,当你赋给它一个关联表的时候,你改变了 ”foo”的作用域 .它的作用域不再关联到最初生成它的对象, xhr的参数对象上。要解决这个问题,你可以使用 hitch来强制这个函数保留它原来的作用域。正确的写法应该是像这样:view plaincopy to clipboardprint?
01.var myObj = {   
02.    foo: "bar",   
03.    method: function(data){   
04.        console.log(this.foo+" "+data);   
05.    }   
06.};   
07.dojo.xhrGet({   
08.    url: "/something.php",   
09.    load: dojo.hitch(myObj, "method")   
10.}); 
var myObj = {
    foo: "bar",
    method: function(data){
        console.log(this.foo+" "+data);
    }
};
dojo.xhrGet({
    url: "/something.php",
    load: dojo.hitch(myObj, "method")
}); dojo.hitch需要两个参数,第一个参数指明了函数调用的关联作用域,第二个参数为一个函数对象或第一个对象中的成员函数名。
(注:关于 dojo.xhrGet,请参见后续的 AjaxIO部分)dojo.partial
你是否想过要控制传递给函数的参数?举例来说,你是否有过这样的需求,设定传递给函数的第一个参数为已定义的值,而其它的参数仍然是可变化的。 dojo提供了一种方式可以满足这种需求。和 dojo.hitch类似, dojo.partial也是一个返回值为函数的函数。它所做的是让你可以用预定义的值锁定函数的前几个参数。这是一个非常强大的功能,特别是当你需要传入对象引用或者其它类似的给数据存储的通知函数。下面就是一个使用 partial的示例:view plaincopy to clipboardprint?
01.var dataLoaded = function(someFirstParam, data, ioargs){};   
02.var args = {   
03.    url: "foo",   
04.    load: dataLoaded   
05.};   
06.dojo.xhrGet(args); 
var dataLoaded = function(someFirstParam, data, ioargs){};
var args = {
    url: "foo",
    load: dataLoaded
};
dojo.xhrGet(args); 那么,当 xhrGet函数返回的时候它会调用 dataLoaded函数 ,但是 xhrGet的 load函数期待的参数结构应该是: load(data, ioargs)。那么在 dataLoaded的第一个参数已经确定为 "someFirstParam"的情况下,我们如何去保证 xhrGet对于参数的要求能得到满足 ?对,使用 dojo.partial!看看你可以如何用 dojo.partial来做:view plaincopy to clipboardprint?
01.var dataLoaded = function(someFirstParam, data, ioargs){};   
02.var args = {   
03.    url: "foo",   
04.    load: dojo.partial(dataLoaded, "firstValue");   
05.};   
06.dojo.xhrGet(args); 
var dataLoaded = function(someFirstParam, data, ioargs){};
var args = {
    url: "foo",
    load: dojo.partial(dataLoaded, "firstValue");
};
dojo.xhrGet(args);
它所做的是创建一个新的函数,这个函数封装了 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来判断是否需要将其转换为一个函数:view plaincopy to clipboardprint?
01.// 需要动态地使用一个类   
02.var thing = "dijit.Dialog";   
03.// 先检查它是不是一个函数   
04.if(!dojo.isFunction(thing)){   
05.    thing = dojo.getObject(thing);   
06.}   
07.var dialog = new thing({ title:"bar" }); 
// 需要动态地使用一个类
var thing = "dijit.Dialog";
// 先检查它是不是一个函数
if(!dojo.isFunction(thing)){
    thing = dojo.getObject(thing);
}
var dialog = new thing({ title:"bar" });
当然,你也可以用dojo.isString 来做类似的事情。dojo.isAlien用于检查所传参数是不是一个内建函数。dojo.isObject用于检查所传参数是不是一个对象。 以上就是部分Dojo对于JavaScript的基础扩展函数,在下一部分中,会介绍Dojo对面向对象(OO)及包机制(package system)部分的一些常用函数。发表于 @ 2010年10月30日 11:57:00 | 评论( 0 ) | 编辑| 举报| 收藏 旧一篇:Javascript图表库: Dojo Charting | 新一篇:部分Dojo常用函数简介(二)——面向对象(OO)及包机制(package system)
查看最新精华文章 请访问博客首页相关文章发表评论表 情:          评论内容: 用 户 名:登录 注册 匿名评论 匿名用户验 证 码:  重新获得验证码
  热门招聘职位荷兰互联网公司诚聘Web(Rails)开发工程师【重庆大龙网】高薪诚聘中高级软件工程师美资高薪诚聘软件开发及数据库人才【新迪数字】高薪诚聘JAVA项目软件架构师、JAVA项目主管!!【尚品网】诚招软件开发工程师【UniQlick】【8K-12K】急招Java工程师、技术工程师、数据分析师【 CSDN】高薪诚聘:java、运营、就业、商务策划经理、网站编辑!【武汉亨通科技】高薪诚聘项目经理、高级软件工程师,邀您加盟!【careerfocus】科锐福克斯猎头公司强悍猎聘IT人才!【沃尔玛中国】信息系统部急聘IT英才(上海,深圳)!!!【融资城】投融资平台高薪诚聘技术总监、产品经理等【搜狐公司】海量技术职位火热招聘中!荷兰互联网公司诚聘Web(Rails)开发工程师【重庆大龙网】高薪诚聘中高级软件工程师美资高薪诚聘软件开发及数据库人才【新迪数字】高薪诚聘JAVA项目软件架构师、JAVA项目主管!!【尚品网】诚招软件开发工程师【UniQlick】【8K-12K】急招Java工程师、技术工程师、数据分析师【 CSDN】高薪诚聘:java、运营、就业、商务策划经理、网站编辑!【武汉亨通科技】高薪诚聘项目经理、高级软件工程师,邀您加盟!【careerfocus】科锐福克斯猎头公司强悍猎聘IT人才!【沃尔玛中国】信息系统部急聘IT英才(上海,深圳)!!!【融资城】投融资平台高薪诚聘技术总监、产品经理等【搜狐公司】海量技术职位火热招聘中! 公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告
北京创新乐知信息技术有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
 Email:webmaster@csdn.net
Copyright © 1999-2010, CSDN.NET, All Rights Reserved
 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dojotoolkit/archive/2010/10/30/5975893.aspx