Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.04.2014, 16:20
Новичок на форуме
Отправить личное сообщение для Pedro Garciya Lopez Посмотреть профиль Найти все сообщения от Pedro Garciya Lopez
 
Регистрация: 05.07.2013
Сообщений: 9

Свойство объекта в качестве ссылки на переменную, возможно ли?
Есть некий прототип объекта, и есть несколько объектов которые наследуют этот прототип. Так же есть глобальная переменная, которую каждый из этих объектов может изменять одним из своих методов. Точнее таких переменных может быть несколько, поэтому я хотел при инициализации конкретного объекта указывать с какой именно переменной он работает. Можно ли как-то это реализовать? Так как я думал, не получается:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<script>
	//Объект
	function obj(init)
    {
        this.data = init.data;
    }

    obj.prototype.f1 = function(d) 
    {
		this.data = d;
    }

	var var1='первоначальное значение',
	
		o1 = new obj({ data: var1 }), // инициализируем объект o1

		// я наивно полагал что таким образом свойство data этого
		// объекта будет ссылаться на переменную var1
		// и в методе она будет доступна через this.data
	
		o2 = new obj({ data: var1 }); // инициализируем объект o2

	o1.f1('первый'); //вызываем метод объекта o1 который по моим предположениям должен был изменить значение var1 

	alert(var1); // увы var1 по прежнему равен своему первоначальному значению
	
	o2.f1('второй');
	alert(var1);
</script>
<body>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 15.04.2014, 16:31
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Все глобальные переменные - это свойства объекта window. Что мешает из методов обращаться к ним как window['varName']? А в качестве параметра можно передавать имя нужной глобальной переменно строкой.
Примерно так:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<script>

    function obj(init)
    {
        this.data = init.data;
    }
 
    obj.prototype.f1 = function(d) 
    {
        window[this.data] = d;
    }
 
    var var1='первоначальное значение',
     
        o1 = new obj({ data: 'var1' }),
 
     
        o2 = new obj({ data: 'var1' });
    o1.f1('первый');
 
    alert(var1); 
     
    o2.f1('второй');
    alert(var1);
</script>
<body>
</body>
</html>

Последний раз редактировалось jsnb, 15.04.2014 в 16:35.
Ответить с цитированием
  #3 (permalink)  
Старый 15.04.2014, 16:34
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

http://dmitrysoshnikov.com/ecmascrip...tion-strategy/
Ответить с цитированием
  #4 (permalink)  
Старый 15.04.2014, 16:43
Аватар для Makarov
Профессор
Отправить личное сообщение для Makarov Посмотреть профиль Найти все сообщения от Makarov
 
Регистрация: 08.07.2013
Сообщений: 212

А в общем случае (не глобальная переменная) можно запилить в объекте свойство скажем scope, передавать в это свойство прям контекст и внутри уже с ним работать
Ответить с цитированием
  #5 (permalink)  
Старый 15.04.2014, 18:41
Новичок на форуме
Отправить личное сообщение для Pedro Garciya Lopez Посмотреть профиль Найти все сообщения от Pedro Garciya Lopez
 
Регистрация: 05.07.2013
Сообщений: 9

Octane, спасибо за статью! Помогло ... таки by sharing
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли получить факт изменения ссылки во фрейме?? NickManager Библиотеки/Тулкиты/Фреймворки 4 18.09.2013 20:46
Как переименовать свойство объекта? Маэстро Events/DOM/Window 28 25.10.2012 16:02
Не могу получить свойство объекта FINoM Общие вопросы Javascript 4 04.12.2011 02:46
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 18:39
Объект как свойство объекта Cooskon Общие вопросы Javascript 6 16.02.2010 20:41