Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 22.02.2011, 20:12
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Здравствуйте, чтобы не сорить новыми темами, решил написать тут, вопрос похожий

к примеру есть простенький конструктор
function constr(){
	var a = 0
	
	this.inca = function(){
		a++
	}
	
	this.geta = function(){
		return a
	}
}


создаем новый объект
var o = new construct()

и нужно получить копию этого объекта, а точнее ссылку на копию, а не на оригинал, чтобы применить один из методов в копии, изменяющих локальную переменную, есть ли такая возможность?
o.inca()

alert(o.geta())

var temp = o // так получим ссылку

temp.inca()

alert(o.geta()) //значение изменилось, но по задумке не надо бы ((


копирование всех свойств и методов в цикле не помогает, локальные переменные не копируются
__________________
readOnly
Ответить с цитированием
  #12 (permalink)  
Старый 22.02.2011, 21:02
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Ну вызовите конструктор еще раз, в чем проблема?
Ответить с цитированием
  #13 (permalink)  
Старый 22.02.2011, 21:13
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от poorking
есть ли такая возможность?
Нет.

А зачем?
Ответить с цитированием
  #14 (permalink)  
Старый 22.02.2011, 21:50
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

B@rmaley.e><e,
с новым вызовом конструктора не получится, потому как в конкретном случае конструктор генерирует некоторые локальные перемненные рандомно.
Kolyaj,
например:
function constr(){
	var r = Math.round(Math.random()*3)
	var a = 0;
	
	this.geta = function(){
		return a
	}
	
	this.calc = function(){
		switch(r){
			case 0:
				a = 0;
			case 1:
				a += 11
			break;
			case 2:
				a += 22
			break;
			case 3:
				a += 33
			break;
		}
	}
}

var o = new construct() //в экземпляре, на который получили ссылку есть локальная переменная, генерируемая рандомно (r)


нужно проверить, например, стоит ли выполнять calc().

если geta() возвращает после метода calc() больше, ну скажем 100, то не выполнять, иначе, выполнить

я хотел создать ссылку на копию объекта, выполнить calc(), проверить, и потом в зависимости от результата выполнять или не выполнять calc() по ссылке на оригинал
__________________
readOnly
Ответить с цитированием
  #15 (permalink)  
Старый 22.02.2011, 22:52
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Такой конструктор вы сами написали? Отличный пример против приватизации переменных в JS.
Ответить с цитированием
  #16 (permalink)  
Старый 22.02.2011, 23:15
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Ну приватизировать вроде получается, если я правильно понял
function constr(){
	var a = 0
	
	this.inca = function(){
		a++
	}
	
	this.geta = function(){
		return a
	}
}

var o1 = new constr()
	


var o2 = new constr()

o1.inca()
o1.inca()
o1.inca()


o2.inca()

alert(o1.geta()+"  "+o2.geta()) //у каждого своя приватная a

но вот значение в переменной хранить нельзя, придется тогда рандомную r, генерируемую в конструкторе, хранить как свойство и проверять
if(!(o.geta() + o.r>100)) 
   o.calc()
__________________
readOnly
Ответить с цитированием
  #17 (permalink)  
Старый 22.02.2011, 23:25
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от poorking
Ну приватизировать вроде получается, если я правильно понял
Конечно получается. Только это создаёт много не заметных с первого взгляда проблем. Ваша одна из таких.
Ответить с цитированием
  #18 (permalink)  
Старый 23.02.2011, 00:35
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Понятно, тогда постараюсь избегать подобных ситуаций. Спасибо!
__________________
readOnly
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Вывод JS значения в одну строку в HTML velo Общие вопросы Javascript 7 15.12.2009 03:57
Html метки + div + JS boltayka Events/DOM/Window 1 07.09.2009 17:21
Самая лучшая книга по JS? ulandj Оффтопик 2 06.04.2009 11:35