var that = this VS dojo.hitch()

时间:2015-05-13 11:36:40

标签: javascript dojo

使用 var = this ;

是否更好?
var that = this;
array.forEach( tabPages, function ( tabPage, index ) {
  that.layerTabPageClose(tabPage.id, true);
  ...
});

或使用 lang.hitch()代替

array.forEach( tabPages, lang.hitch( this, function ( tabPage, index ) {
  this.layerTabPageClose(tabPage.id, true);
  ...
}));

哪一个更好,为什么?

由于

2 个答案:

答案 0 :(得分:5)

特定的情况下,两者都没有;使用Dojo array.forEach的第三个参数代替:

array.forEach(tabPages, function ( tabPage, index ) {
  this.layerTabPageClose(tabPage.id, true);
  ...
}, this);
// ^^^^

或者使用浏览器的内置Array#forEach(从ES5开始)及其第二个参数:

tabPages.forEach(function ( tabPage, index ) { // <== Note change
  this.layerTabPageClose(tabPage.id, true);
  ...
}, this);
// ^^^^

在一般情况下:

如果您在上下文中创建一个函数(并且您必须,var that = this可以选择),那么这无关紧要,完全是一个问题风格。

如果不是,则需要使用lang.hitch或ES5的Function#bind

答案 1 :(得分:1)

它实际上是您可以做出的个人选择。如果您希望能够在任何地方使用上下文,那么您应该使用dojo/_base/lang::hitch(),这样您就可以始终使用this上下文。

另一个选择是使用(父)范围上的额外变量,如thatvm(通常与AngularJS一起使用),但两者都很棒。

我要做的唯一建议是你在整个代码库中做同样的事情。如果您有时使用范围变量,而有时使用lang.hitch(),则只会导致混淆。

无论如何,像dojo/_base/array这样的方法已经允许你包含上下文:

  

的forEach(ARR,回调,的thisObject)

API文档:http://dojotoolkit.org/api/?qs=1.10/dojo/_base/array

在这些情况下,这是一个更好的解决方案。