Здравствуйте. Появился вопрос, возможно ли при создании свойства у объекта в виде немедленно вызываемой функции использовать другие свойства объекта?
Например:
var obj = {
msg: (function () {
var t1 = "TT1";
console.log('MSG');
return "msg = " + t1;
}()),
GetMsg: function () {
return this.msg;
}
};
console.log(obj.GetMsg());
console.log(obj.msg);
Результат:
MSG
msg = TT1
msg = TT1
Код отработал как нужно, но значение свойства msg задается как литерал. Пробовал переделать:
var obj = {
t1: (function () {
console.log('TT1');
return "tt1";
})(),
msg: (function() {
console.log('MSG');
console.log('this.t1 = ' + this.t1);
return "msg = " + this.t1;
}()),
GetMsg: function () {
return this.msg;
}
};
console.log(obj.GetMsg());
console.log(obj.msg);
console.log(obj.t1);
Результат:
TT1
MSG
this.t1 = undefined
msg = undefined
msg = undefined
tt1
В этом случае не получится воспользоваться переменной this т. к. она указывает не на текущий объект. В этом и вопрос, как использовать другие переменные объекта?
Если при создании отдать внешнюю переменную то она ее видит, например:
var t2 = "TT2";
msg: (function(prop) {
console.log('MSG');
console.log('prop = ' + prop);
return "msg = " + prop;
}(t2)),
Но он все равно не принимает свойства текущего объекта.