![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
день добрый!
хочется сделать так, чтобы при обращении к объекту выводилось какое-либо его свойство (заранее определенное). по типу как обращение к textfield выводит textfield.text. то есть: есть объект (item). есть значение ("item_17"), допустим это будет свойство val. и есть число ("17"), допустим это будет свойство id. необходимо чтобы: trace (item) выводило "item_17". trace (item.val) выводило "item_17". trace (item.id) выводило "17". есть ли стандартные методы задания свойства по умолчанию? без создания новых классов и проч.. чтобы по возможности было минимум кода.. |
|
|||||
|
тебе к мовиклипу надо это прикрутить?
|
|
|||||
|
Цитата:
полный смысл такой: объект создается в рантайме, допустим при нажатии кнопки: _root["item"] = new Object (); потом я устанавливаю ему два свойства (имена любые) _root["item"]["val"] = "item_17"; _root["item"]["id"] = "17"; (все в кавычках потому что все имена я загружаю извне) это то как я сейчас реализовал. теперь мне надо при нажатии на другую кнопку получить значение свойства (допустим VAL) обращаясь только к объекту, а не к его свойству. чтобы trace(_root["item"]) вывел "item_17". может есть вариант решения не через объект? можно конечно создать невидимый textField и работать через свойство "text", но мне не хотелось бы использовать интерфейсные объекты.. |
|
|||||
|
var val=_root["item"]["val"];
var id=_root["item"]["id"]; trace ("val = "+val+"; id = "+id); ctrl+enter |
|
|||||
|
Цитата:
попробую по другому: я знаю что у меня есть объект _root.my_obj (создал где-то в далеких просторах кода). я знаю что у него есть несколько свойств, одно из которых например называется value (ему присвоено значение). теперь, не зная имени этого свойства, я хочу получить его значение просто обращаясь к _root.my_obj. в идеале я бы хотел вообще избавиться от свойства VALUE: _root.my_obj = "кирпич"; _root.my_obj.width= 37; _root.my_obj.height = 15; _root.my_obj.length = 15; но так, естественно, не работает! |
|
|||||
|
видимо я не понял вопрос
![]() Цитата:
а вот _root.my_obj = - это есть конструктор объекта, и кирпич в правой стороне равенства недопустим. Честно говоря я так и не понял суть твоего вопроса: Цитата:
|
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
this.setMyObjectClass = function() {
delete this.setMyObjectClass;
var MyObject = function () {
this.init();
};
var tmp = MyObject.prototype.__proto__=Object.prototype;
tmp.init = function() {
};
tmp.addProperty("val", function () {
return this.value;
}, function (value) {
this.value = value;
});
tmp.toString = function() {
return this.val;
};
_global.MyObject = MyObject;
ASSetPropFlags(_global, 'MyObject', 7, 1);
};
this.setMyObjectClass();
//
_root["item"] = new MyObject();
_root["item"]["val"] = "item_17";
_root["item"]["id"] = "17";
trace(_root["item"]);
|
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
а вообще этот вопрос - следствие неправильной организации проекта.
дефолтная переменная задается для класса. если у тебя разное поведение объектов при одинаковом обращении, следовательно тебе нужно делать разные классы. вот и всё. |
|
|||||
|
Цитата:
вообще подход неправильный был. мне теперь просто, уже отстраненно от проекта, интересно сделать что-то вроде: _root.item = new Object(); _root.item.property01 = "это оно!"; _root.item.setDefaultProperty ("property01"); // вот такую функию сделать хочу trace(_root.item); // "это оно!" |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|