DOJO API翻译或解读-dojo/_base/lang --hitch()

hitch()函数是DOJO库中用于确保函数在指定上下文中执行的工具,常用于处理异步操作中this指向问题。通过hitch(),可以避免因执行上下文改变导致的错误,例如在事件处理函数中。文中通过示例展示了hitch()如何确保正确绑定this,并传递参数。" 88728571,8254541,C语言实现的‘愚公移山’小游戏解析,"['C语言', 'C/C++', '编程实践', '算法设计', '游戏逻辑']
摘要由CSDN通过智能技术生成
hitch()函数

hitch() 是一个函数,会在给定的上下中执行给定一个执行函数。hitch允许你去控制一个函数如何执行,往往在异步操作中起作用。

我们常常会写出这样的代码:(博主:这个代码意图在”click”事件触发时,执行此时定义的”processEvent”。)

require(["dojo/on"], function(on){
    var processEvent = function(e){
        this.something = "else";
    };
    on(something, "click", processEvent);
});

它错误的原因是关于一个无法解析的变量。原因是,像上文这种异步回调函数的应用场景,当代码正在执行时,上下文会发生变化。执行上下文环境已经不再是最初提供的对象,而指向了外部对象(on的回调函数),为了解决这个问题,你可以使用hitch()去强制processEvent在此时“this”指向的上下文来执行。如下:

require(["dojo/on", "dojo/_base/lang"], function(on, lang){

  var processEvent = function(e){
    this.something = "else";
  };

  on(something, "click", lang.hitch(this, processEvent));

});

(博主,这种因执行上下文发生变化而导致的问题,可以用hitch()解决,用到this的时候,要注意分析是否会因为执行上下文变化,而出现错误了。)

  • 一个简单的例子:
require(["dojo/_base/lang"], function(lang){
  var myObj = {
    foo: "bar"
  };

  var func = lang.hitch(myObj, function(){
    console.log(this.foo);
  });

  func();
});

上面的代码,bar 会被成功打印。所以在执行函数console.log(this.foo)时,this指向的是 myobj。
当调用函数,是给定执行上下文的方法时,可以用方法命传参的方式,如下:

require(["dojo/_base/lang"], function(lang){
  var myObj = {
    foo: "bar",
    method: function(someArg){
      console.log(this.foo);
    }
  };

  var func = lang.hitch(myObj, "method");

  func();
});

同时,函数执行若需要参数,如下:

require(["dojo/_base/lang"], function(lang){
  var myObj = {
    foo: "bar",
    method: function(someArg){
      console.log(someArg + " " + this.foo);
    }
  };

  var func = lang.hitch(myObj, "method", "baz");

  func();
});

转自http://www.cnblogs.com/ProgrammerZhong/p/5825324.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值