使用 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);
...
}));
哪一个更好,为什么?
由于
答案 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
上下文。
另一个选择是使用(父)范围上的额外变量,如that
或vm
(通常与AngularJS一起使用),但两者都很棒。
我要做的唯一建议是你在整个代码库中做同样的事情。如果您有时使用范围变量,而有时使用lang.hitch()
,则只会导致混淆。
无论如何,像dojo/_base/array
这样的方法已经允许你包含上下文:
的forEach(ARR,回调,的thisObject)
API文档:http://dojotoolkit.org/api/?qs=1.10/dojo/_base/array
在这些情况下,这是一个更好的解决方案。