var that = this VS dojo.hitch()
var that = this VS dojo.hitch()
使用var that = 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 的 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
。
这实际上是您可以做出的个人选择。如果您更希望能够在任何地方使用上下文,那么您可能应该使用 dojo/_base/lang::hitch()
,这样您就可以一直使用 this
上下文。
另一种选择是在(父)作用域上使用额外的变量,例如 that
或 vm
(通常与 AngularJS 一起出现),但两者都很棒。
我唯一的建议是你在整个代码库中做同样的事情。如果您有时使用范围变量,而其他时候使用 lang.hitch()
,那么只会导致混淆。
无论如何,某些方法,例如 dojo/_base/array
已经允许您包含上下文:
forEach(arr,callback,thisObject)
API 文档:http://dojotoolkit.org/api/?qs=1.10/dojo/_base/array
所以在这些情况下这是一个更好的解决方案。
使用var that = 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 的 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
。
这实际上是您可以做出的个人选择。如果您更希望能够在任何地方使用上下文,那么您可能应该使用 dojo/_base/lang::hitch()
,这样您就可以一直使用 this
上下文。
另一种选择是在(父)作用域上使用额外的变量,例如 that
或 vm
(通常与 AngularJS 一起出现),但两者都很棒。
我唯一的建议是你在整个代码库中做同样的事情。如果您有时使用范围变量,而其他时候使用 lang.hitch()
,那么只会导致混淆。
无论如何,某些方法,例如 dojo/_base/array
已经允许您包含上下文:
forEach(arr,callback,thisObject)
API 文档:http://dojotoolkit.org/api/?qs=1.10/dojo/_base/array
所以在这些情况下这是一个更好的解决方案。