hitch是dojo核心的方法之一,主要用于把一个方法的执行绑定到某个作用域上面,这样这个方法就可以访问该作用域的变量或者调用其它方法了。
参数说明
参数名称 | 类型 | 描述 |
scope | Object | 用于方法执行的作用域 |
method | Function|String | 在scope作用域中需要执行的方法 |
Ø 例子1
//声明一个对象myObject,只有一个属性foo
var myObj = {
foo: "bar"
};
//创建一个方法func,该方法在myObj对象中执行,因此可以方法myObj中的属性,这里的this就是指向了myObj对象
var func = dojo.hitch(myObj, function() {
console.log(this.foo);
});
//执行这个方法,在控制台中输出bar
func();
//控制台输出bar
Ø 例子2
在一个给定的作用域中执行一个方法
//定义一个对象,包含一个method方法
var myObj = {
foo: "bar",
method: function(someArg) {
console.log(this.foo);
}
};
//定义个新的方法来绑定myObj的method方法
var func = dojo.hitch(myObj, "method");
//执行这个新定义的方法,就像执行myObj.method()方法一样
func();
//控制台输出bar
上面我们使用字符串来执行方法,下面我们来看看用方法来指定的样例
//定义一个对象,包含一个method方法
var myObj = {
foo: "bar",
method: function(someArg) {
console.log(this.foo);
}
};
//定义个新的方法来绑定myObj的method方法,这里直接用的是myObj.method
var func = dojo.hitch(myObj, myObj.method);
//执行这个新定义的方法,就像执行myObj.method()方法一样
func();
//控制台输出bar
我们在来看一个修改属性值的hitch应用
var foo = {
bar:2
};
//这个方法创建一个方法,在这个方法中修改bar的foo的bar的值为10,并且理解执行该方法
dojo.hitch(foo, function(){
this.bar = 10;
})();
console.log(foo.bar);
//控制台中输出10
Ø 例子3
我们也可以往要执行的方法中增加指定的参数
var myObj = {
foo: "bar",
method: function(someArg) {
console.log(someArg + " " + this.foo);
}
};
//调用method方法的时侯指定了一个参数,该参数baz
var func = dojo.hitch(myObj, "method", "baz");
func();
//控制台输出baz bar
我们再来看一下如何通过外部传递参数
var foo = {
//该方法有三个参数
bar:function(a,b,c){
console.log(a,b,c);
}
};
//在定义这个新方法的时侯指定了两个参数,第三个参数在该方法真正调用的时侯才传入
var func = dojo.hitch(foo, "bar", 1, 2);
//传入第三个参数
func(3);
//控制台输出1 2 3
Ø 例子4
如果我们要在页面停止鼠标右键事件的话,只需要下面一句话
document.onconextmenu= dojo.hitch(dojo, "stopEvent");
例子5
我们来调用一个ajax应用看看
var myObj = {
foo: "bar",
method: function(data) {
console.log(this.foo + " " + data);
}
};
dojo.xhrGet({
url: "http://www.baidu.com",
load: myObj.method
});
//当你执行上面这个方法的时侯,控制台将打印一个undefined出来,这是因为myObj.method是在load方法中调用的,他的作用域和load方法是同一个作用域,因此访问不到foo属性,改成下面的方法就能正常访问了,通过dojo.hitch把load方法的执行放到myObj的method方法中,也就是和myObj的method在同一个作用域了
var myObj = {
foo: "bar",
method: function(data) {
console.log(this.foo + " " + data);
}
};
dojo.xhrGet({
url: "http://www.baidu.com",
load: dojo.hitch(myObj,"method")
});
//控制台输出bar