Просмотр полной версии : Как отловить ситуацию: инстансу динамического класса добавляется новое свойство?
Вот, что имеется в виду: Есть dynamic class Foo. Создаем его инстанс -> var foo = new Foo();
дальше создаем у него свойство таким образом:
foo.someProp = 'abc';
ни __resolve ни addProperty в таком случае не вызывается, а что же тогда вызывается? Как можно узнать, что произошла попытка создать свойство?
DarkLight
18.05.2008, 19:25
1. Это действительно так необходимо? Нельзя ли изменить структуру проекта так, чтобы избежать добавления свойств в рантайме?
2. Я бы сделал так: написал бы класс с названием типа PropertyAdder и статическим методом addProperty(instance, property, value) . А при вызове метода делал бы экземпляру класса __resolve или addProperty - как захочется
XMLC.prototype.__resolve = function (p) {
if (!isNaN(p)) {
return this._childNodes[p];
} else if (p.charAt(0) == ATTRIBUTE_ACCESSOR) {
var attr:String = p.slice(1, p.length);
if(attr.length){
if (this._attributes[attr] != undefined) {
return this._attributes[attr];
} else {
this._attributes[attr] = '';
return this._attributes[attr];
}
} else {
return this._attributes;
}
} else if(p instanceof String) {
for (var i:Number = 0; i < this.childNodes.length; i++) {
if (this._childNodes[i].nodeName == p) {
return this._childNodes[i];
}
}
this._childNodes.push(new XMLC(p));
return this._childNodes[this._childNodes.length - 1];
}
return undefined;
}
Ну вот кусок кода, чтобы было понятнее зачем мне это нужно =) В двух словах - имитация ХМЛ из АС3 в АС2 =) Т.е. хочется сделать что-то на подобие хml.@attribute = 'abc'.
T.e. если делать так: хml.@['attributeName'] = 'abc'; то работает, но это не красиво =)
Alex_beginner
25.05.2008, 17:37
Резидентных методов отловить данное событие нет.
Однако можно организовать циклическую проверку на существование свойства в объекте класса, хотя это вариант расточителен.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.