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

hitch()

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

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

1 require(["dojo/on"], function(on){
2     var processEvent = function(e){
3         this.something = "else";
4     };
5     on(something, "click", processEvent);
6 });

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

1 require(["dojo/on", "dojo/_base/lang"], function(on, lang){
2
3   var processEvent = function(e){
4     this.something = "else";
5   };
6
7   on(something, "click", lang.hitch(this, processEvent));
8
9 });

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

例子:

一个简单的例子:

 1 require(["dojo/_base/lang"], function(lang){
 2   var myObj = {
 3     foo: "bar"
 4   };
 5
 6   var func = lang.hitch(myObj, function(){
 7     console.log(this.foo);
 8   });
 9
10   func();
11 });

上面的得吗,bar 会被成功打印。所以在执行函数console.log(this.foo)时,this指向的是 myobj。

当调用函数,是给定执行上下文的方法时,可以用方法命传参的方式,如下:

 1 require(["dojo/_base/lang"], function(lang){
 2   var myObj = {
 3     foo: "bar",
 4     method: function(someArg){
 5       console.log(this.foo);
 6     }
 7   };
 8
 9   var func = lang.hitch(myObj, "method");
10
11   func();
12 });

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

 1 require(["dojo/_base/lang"], function(lang){
 2   var myObj = {
 3     foo: "bar",
 4     method: function(someArg){
 5       console.log(someArg + " " + this.foo);
 6     }
 7   };
 8
 9   var func = lang.hitch(myObj, "method", "baz");
10
11   func();
12 });

上述代码会打印: baz bar

时间: 2024-10-13 00:32:26

DOJO官方API翻译或解读-dojo/_base/lang --hitch()的相关文章

DOJO官方API翻译或解读-dojo/store (自定制存储器)

dojo/store 是对已存数据的访问和存储的统一接口,dojo/store意图以一个简单.易于使用和扩展的API来,替代.集合和改善 dojo/data 和dojox/storage .基于HTML5/W3C’s IndexedDB object store API. 原先的dojox/storage 已经被Dojo object store Api兼容. API Methods 该API下所有的方法都是可选的,所有的方法都会返回一个promise.(部分在w3c的object store

Android官方API翻译——HttpURLConnection

人工翻译,水平有限,欢迎指正交流 原文地址:http://developer.android.com/reference/java/net/HttpURLConnection.html ------------------------------------------------------------------- 继承自java.net.URLConnection 适用于HTTP(RFC 2616)的URLConnection,用于在网络上发送和接受数据.这个类可以用来发送或者接受那些事先

dojo 官方翻译 dojo/_base/lang 版本1.10

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#dojo-base-lang 应用加载声明: require(["dojo/_base/lang"], function(lang){ // lang now contains the module features }); clone() 克隆任何对象或者元素节点,返回:一个新的对象. require(["dojo/_base/lang

dojo 官方翻译 dojo/_base/array

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/array.html#dojo-base-array array模块dojo进行了很好的封装,如果想要调用必须先加载该模块: require(["dojo/_base/array"], function(array){ // array contains the features }); indexOf() 返回值:字符串在数组中第一次出现的位置,如果没有找到默认返回

dojo 官方翻译 dojo/json 版本1.10

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/json.html#dojo-json require(["dojo/json", "dojo/dom", "dojo/on", "dojo/domReady!"], function(JSON, dom, on){ on(dom.byId("convert"), "click",

dojo 官方翻译 dojo/domReady 版本1.10

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/domReady.html#dojo-domready dom加载完成后,执行. require(["dojo/domReady!"], function(){ // will not be called until DOM is ready }); 通常dojo/domReady没有也不需要设定一个返回值,而且,它是被放在加载模块数组的最后加载. require(["

dojo 官方翻译 dojo/string 版本1.10

官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/string.html#dojo-string require(["dojo/string"], function(string){ var a = string.pad("pad me", 10); var b = string.rep("dup", 10); var c = string.substitute("${repla

dojo 官方翻译 dojo/aspect

官网地址:http://dojotoolkit.org/reference-guide/1.10/dojo/aspect.html after() 定义:after(target, methodName, advisingFunction, receiveArguments); 意义:在target的methodName方法之后执行advisingFunction方法. define(["dojo/aspect"], function(aspect){ aspect.after(doj

翻译 - Ajax with dojo/request

原文:Ajax with dojo/request dojo/request是自Dojo1.8才引入的新API,用于客户端向服务端发起请求.本教程主要介绍dojo/request的API:你将会学到如何从服务端获取一个文本文件,如果有错误发生该如何处理,向服务端提交数据,通知API的优点,使用注册表用于使用同样的代码从不同地址请求数据. 开始 dojo/request允许你在不刷新页面的情况下向服务端发送数据或从服务端接收数据(通常所有的AJAX).这个新功能引入了如何写出更紧凑的代码及如何快速