Javascript var this=this VS dojo.hitch()
使用var=this是否更好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 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);
// ^^^^