当前位置: 首页 > 工具软件 > Hitch > 使用案例 >

Dojo 扩展 javascript 核心库 - dojo.hitch

松飞翮
2023-12-01

原文:http://blog.csdn.net/zsp_1111/article/details/7471050

dojo.hitch 是在 Dojo 中直接或间接被广泛使用的函数.

hitch 的中文意思是: 钩住,拴住. 在 Dojo 中, dojo.hitch() 的作用是给一个方法绑定其执行上下文.


在 Dojo 中, dojo.hitch 函数非常重要. 原因有两点: 

1. Javascript 中, 函数不与定义它们的上下文即作用域绑定

2. 在 Dojo 中, 很多函数都用 hitch 的参数传递方式: 第一个参数是上下文对象, 第二个参数是一个函数


例 (函数不与定义它们的上下文即作用域绑定) :

[javascript]  view plain copy
  1. <span style="font-family:Verdana;">var Student = {  
  2.     college: "MIT",  
  3.     getCollege: function() {  
  4.         return this.college;  
  5.     }  
  6. }  
  7.   
  8. function printCollege(foo) {  
  9.     alert("College: " + foo());  
  10. }  
  11.   
  12. printCollege(Student.getCollege); // "College: undefined", 即 this 的值为 GLOBAL</span>  

正确的方法:
[javascript]  view plain copy
  1. <span style="font-family:Verdana;">printCollege(function() {  
  2.     return Student.getCollege();  
  3. }); // "College: MIT", this 的值被显示的指定为 Student</span>  

函数上下文中 this 的确定规则如下:
函数上下文中this的值是函数调用者提供并且由当前调用表达式的形式而定的。 如果在调用括号()的左边,有引用类型的值,
那么this的值就会设置为该引用类型值的base对象。 所有其他情况下(非引用类型),this的值总是null。然而,由于null对

于this来说没有任何意义,因此会隐式转换为全局对象。


用 dojo.hitch 再次改写上面的正确方法(有两种方式, 如下), 代码看上去简洁清晰了一些:

[javascript]  view plain copy
  1. <span style="font-family:Verdana;">printCollege(dojo.hitch(Student, Student.getCollege));  
  2. // hitch 返回 function() {return Student.getCollege.apply(Student, arguments);}  
  3. printCollege(dojo.hitch(Student, "getCollege"));  
  4. // hitch 返回 function() {return getCollege.apply(Student, arguments);}</span>  

当 dojo.hitch 的第一个参数省略的时候, 相当于把第一个参数设置为 null , 这时 this 的值指的是 global 全局上下文.

当 dojo.hitch 有3个及以上参数的时候, 第三个开始往后的参数被用做 dojo.hitch 返回的匿名函数的参数传入

[javascript]  view plain copy
  1. <span style="font-family:Verdana;">function printsth(x, y, z) {  
  2.     alert(x + y + z);  
  3. }  
  4.   
  5. var printArg = dojo.hitch(null"printsth""我是参数1""我是参数2");  
  6. // 返回 function() {return printsth.apply(  
  7. //                  null, ["我是参数1", "我是参数2"].concat(arguments))}  
  8.   
  9. printArg("这里的参数");  
  10. //相当于: printsth("我是参数1", "我是参数2", "这里的参数");</span>  

如果 dojo.hitch 的第一个参数 上下文 指定为 null, dojo 还提供了另外一个函数:
[javascript]  view plain copy
  1. <span style="font-family:Verdana;">dojo.hitch(null, handler, args)  
  2. dojo.partial(handler, args)  
  3. //这两者是等价的</span>  

为函数绑定上下文并返回函数是函数式编程的基础.
 类似资料: