Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Динамическое создание объектов (https://javascript.ru/forum/jquery/18345-dinamicheskoe-sozdanie-obektov.html)

Telnet 27.06.2011 12:15

Динамическое создание объектов
 
function Data(show) {
	this.show = show || "вкл";
}

var data = new Data()

function Entite(show) {
	this.show = show || "вкл";
}

Entite.prototype = data;

poly = new Entite("вкл");
rect = new Entite("выкл");

alert(poly.show);  
alert(rect.show);


Есть такой вот простой код для создания наследования.
Необходимо что бы, по нажатия на кнопку происходило рождение нового объекта Entite, но каждый раз разного
$("#show").click(function(){
poly = new Entite("вкл");//но что бы по нажатию на кнопку имя объекта генерировалось динмически
});

<input type="button"  id='show'  value='Показать'/ > />

SlavaPav 27.06.2011 14:21

Math.round(Math.random()) ? 'Вкл' : 'Выкл';

Telnet 27.06.2011 16:31

Извеняюсь, наверно глупый вопрос, но мне не понятно.
Как это
Math.round(Math.random()) ? 'Вкл' : 'Выкл';
привязать к
new Entite
что бы вновь создаваемый объект был наследником объекта Entite

Telnet 27.06.2011 16:39

нужно что то типа этого
 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript" src="jquery-1.6.1.min.js"></script>
<script language="JavaScript" type="text/javascript">
function Data(show) {
	this.show = show || "вкл";
}

var data = new Data()

function Entite(show) {
	this.show = show || "вкл";
}

Entite.prototype = data;

$(document).ready(function(){ 

	$("#show").click(function(){
		for(var i=0;i<3;i++){
		i+'poly' = new Entite("вкл");//тут ошибка так как нельзя имя переменной так создавать
	
		alert(i+'poly'.show);  
		}
	});
	
});

</script>
<input type="button"  id='show'  value='Показать'/ >

SlavaPav 27.06.2011 18:01

Не до конца понимаю что вам нужно и зачем:
$("#show").click(function(){
    var polys = {};
    for(var i=0; i < 3; i++) {
        polys[i + 'poly'] = new Entite("вкл");
        
        alert(polys[i + 'poly'].show);  
    }
});

Telnet 28.06.2011 12:20

все спасибо работает
 
Сделал вот так пока что все работает.
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript" src="jquery-1.6.1.min.js"></script>
<script language="JavaScript" type="text/javascript">
function Data(show) {
	this.show = show || "вкл";
}

var data = new Data()

function Entite(show) {
	this.show = show || "вкл";
}

Entite.prototype = data;

$(document).ready(function(){ 

	$("#show").click(function(){
		for(var i=0;i<3;i++){
		window[i+'poly'] = new Entite("вкл");
		//rect = new Entite("выкл");
		 
		}
		alert(window[2+'poly'].show); 
	});
	
});

</script>
<input type="button"  id='show'  value='Показать'/ >

Зачем мне это нужно.
У меня на сайте пользователь должен мочь сохранять свои персональные настройки страницы объект Data я буду использовать для сохранения настроек по умолчанию, а объект Entite для личных настроек пользователя, а здесь просто просил объяснить сам принцип динамического создания объектов, так как реально в объекте Data, будет очень много всего то я написал суть процесса.

Telnet 28.06.2011 15:56

Можно ли изменить свойства уже созданному объекта, через переустановку свойств родите
 
Решил написать в той же теме, хотя теперь задача не много по менялась.
Так как я делаю, форму настройки свойств страницы, то в объекте data хранятся общие настройки, а в динамически генерируемом [b+'zona'] настройки текущей страницы.
Когда объекты [b+'zona'] рождаются от data в них переходят все их свойства и методы, это как раз то что нужно,
Но когда я меняю свойства в объекте data, то в уже созданных объектах [b+'zona'] они не меняются, а нужно что б глобальные настройки после их установки изменяли установки во вновь созданных и уже СУЩЕСТВУЮЩИХ объектах .
Реализовал это вот такой функцией
function reWriteObj(data) { 
		for (var b=0;b<tabs.length;b++)
		{
			window[b+'zona'].coord = data.coord;
			window[b+'zona'].number = data.number;
			window[b+'zona'].changearea = data.changearea;
		}
}

Я не очень хорошо разбираюсь в тонкостях наследования Javascript, все работает но может есть какой нить другой прием заставить изменяться свойства в уже созданных объектах.


Часовой пояс GMT +3, время: 01:05.