Вы также можете использовать выражение функции, однако для этого необходимо определить this.config
до this.core
. Это предотвращает необходимость использования локальной переменной. Однако обратите внимание, что это захватывает значение вместо ссылки на него, поэтому, если вы назначите новое значение для config
, это не повлияет на forEach
. Однако вы все еще можете изменить config.win
, поскольку объект не был клонирован. Такое поведение может быть тонким и вызывать ошибки при неправильном использовании.
С учетом всего сказанного лучше использовать var self = this;
, как предложил Джонатан. Это, однако, еще один способ сделать это, и есть ситуации, когда это полезно.
this.config = {
'win' : "win",
'doc' : "doc"
};
this.core = {
'exp': {
'classParser': function (name) {
return (new RegExp("(^| )" + name + "( |$)"));
},
'getParser': /^(#|\.)?([\w\-]+)$/
},
'typeOf': typeOf,
'hasOwnProperty': function (obj, prop) {
return obj.hasOwnProperty(prop);
},
'forEach': (function(config){
function (arr, fn, scope) {
scope = scope || config.win;
for (var i = 0, j = arr.length; i < j; i++) {
fn.call(scope, arr[i], i, arr);
}
}
})(this.config)
}