FriendsKenny
@FriendsKenny

Возможно ли использование в немедленно создаваемых функциях свойств текущего объекта?

Здравствуйте. Появился вопрос, возможно ли при создании свойства у объекта в виде немедленно вызываемой функции использовать другие свойства объекта?

Например:

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)),


Но он все равно не принимает свойства текущего объекта.
  • Вопрос задан
  • 2308 просмотров
Решения вопроса 1
Невозможно. Во первых, самовызывающаяся функция будет исполнена до создания объекта. Во вторых, самовызывающаяся функция будет исполнена в контексте глобального объекта (или undefined в strict mode).
Варианты: либо весить msg уже после создания объекта, либо сделать msg геттером.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы