Dojo API-dojo.hitch

绑定上下文

dojo.hitch可以将一个函数绑定到具体的上下文上执行。首先考虑1个或者2个参数的情形。再接受2个参数的时候,第一个参数表示要绑定的对象,第二个参数表示要绑定到对象上的方法(可以是一个函数定义或者字符串形式的函数名)。如:

第一种形式的调用:

/*

*o: 要绑定的对象

*f: o中的成员函数

*/

dojo.hitch(o, o.f);

调用后返回的结果为:

function() {

   return o.f.apply(o, arguments);

}

因此,dojo.hitch会返回一个函数

第二种调用形式:

/*

*o: 要绑定的对象

*f: o中的成员函数

*/

dojo.hitch(o, "f");

调用后的返回结果:

function() {

    return o["f"].apply(o, arguments);

}

dojo不仅能绑定成员函数,还能将一个普通函数绑定到一个对象上,或者将一个对象上的方法,绑定到另一个对象上。

/*

*o: 要绑定的对象

*f: 普通函数

*/

dojo.hitch(o, f);



/*返回结果*/

function() {

   return f.apply(o, arguments);

}

/*

*o: 要绑定的对象

*f: p中的成员函数

* o != p

*/

dojo.hitch(o, p.f);



/*返回结果*/

function() {

    return p.f.apply(o, arguments);

}

如果只传递一个参数,那么相当于dojo.hitch中第一个参数被置为null,那么所传递的函数将在全局空间执行:

/*

*f: 传递的函数

*/

dojo.hitch(null, f);



/*返回结果*/

f



dojo.hitch(null, "f");



/*返回结果*/

function() {

    return dojo.global[f].apply(dojo.global, arguments); //dojo.global代表全局对象

}

绑定参数

当传递给dojo.hitch的参数大于2个时,第一个参数仍然是要绑定的对象,第二个参数也是要绑定到对象上的方法,其他的参数是传递给这个被绑定方法的参数:

/*

*o: 要绑定的对象

*f: 要绑定的方法

*a1, a2,... ,an:要传递给f的参数

*/

dojo.hitch(o, f, a1, a2,..., an);

/*返回一个函数*/

function() {

    return f.apply(o, [a1, a2, ..., an].concat(argumetns));  

}

比如有这样一个函数:

var printArgs = function(str1, str2, str3) {

    alert(str1 + str2 + str3);

}

通过dojo.hitch调用:

var print = dojo.hitch(null, printArgs, "this", "is");

print("easy"); // 打印this is easy

/* 实际上调用printArgs("this", "is", "easy");

总结

dojo.hitch实际上就是将一个函数绑定到另一个对象上面,并将这个函数的调用过程封装在一个匿名函数之中,然后将这个匿名函数作为返回值。

 

 

你可能感兴趣的:(dojo)