2015-05-13 3 views
3

Лучше использовать var that = this;var that = this VS dojo.hitch()

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); 
    ... 
})); 

Какой из них лучше и почему?

Благодаря

ответ

5

В этом частности случай, ни; использовать третий аргумент додзё 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

Это скорее личный выбор, который вы можете сделать. Если вы предпочитаете использовать контекст везде, то вам, вероятно, следует использовать dojo/_base/lang::hitch(), так что вы можете работать с контекстом this все время.

Другой вариант заключается в том, чтобы работать с дополнительной переменной в области (родительской), например that или vm (часто видна с помощью AngularJS), но оба они великолепны.

Единственное, что я хотел бы сделать, это то, что вы делаете то же самое через всю вашу кодовую базу. Если вы иногда работаете с переменной области видимости, а в других случаях работаете с lang.hitch(), это приведет лишь к путанице.


В любом случае, некоторые методы, как dojo/_base/array уже позволяют включать контекст:

Foreach (обр, обратного вызова, thisObject)

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

Так что это еще лучшее решение в этих случаях.

Смежные вопросы