Javascript var this=this VS dojo.hitch()

Javascript var this=this VS dojo.hitch(),javascript,dojo,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.layerTabPag

使用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);
  ...
}));
哪一个更好,为什么


在这个特别的案例中,也不要感谢;将第三个参数改为Dojo:

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

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

tabPages.forEach(function(tabPage,index){/这实际上是一个你可以做出的个人选择。如果你想在任何地方都能使用上下文,那么你可能应该使用
dojo/\u base/lang::hitch()
,这样你就可以一直使用
这个
上下文

另一种选择是在(父)范围上使用一个额外的变量,如
that
vm
(通常与AngularJS一起使用),但两者都很好

我唯一的建议是在整个代码库中执行相同的操作。如果您有时使用范围变量,而有时使用
lang.hitch()
,那么这只会导致混淆


无论如何,有些方法,如
dojo/\u base/array
已经允许您包含上下文:

forEach(arr、回调、thisObject)

API文档:

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

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