![]() |
|
||||||||||
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Как правильно сказал iNils, есть проблема - в функции не должно быть явно указано имя объекта. Поэтому код типа
Цитата:
Честно говоря не ожидал что его предложат ![]() Но и создавать объект, дополнительно задавая ему (по сути вручную) параметром его же имя - тоже неверно. Если разобраться, то iNils выполнил тот же код: Цитата:
![]() в моем коде, типа Цитата:
1) объект может лежать вовсе не на _root, а так как свойства _parent у объекта нет, придется искать его какой-нибудь рекурсией 2) может случиться перекрытие имен с death - а вдруг у объекта уже есть смысловая переменная с таким же именем? |
|
|||||
|
Регистрация: Oct 2006
Адрес: Волгодонск
Сообщений: 182
|
а если так
Последний раз редактировалось GFreemen; 06.05.2008 в 01:48. |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Та же дыня только сбоку
![]() ...
function kill (asd) {
trace("this="+this)
for(var i in this){
trace("i="+i+" this[i]="+this[i])
if(this[i]===asd){
delete this[i];
trace(i+" "+this[i]);//zz undefined
}
}
}
...
![]() Но хорошо, что проблема с перекрыванием имен оказалась надуманной мной - переменная типа death не требуется: Object.prototype.del=function(){
//this.death=true
for (var i in _root) {
if (_root[i]==this){
delete _root[i]
}
}
}
zz={}
zz.prop="qwerty"
trace(zz+" "+zz.prop)
zz.del()
trace(zz+" "+zz.prop)
Цитата:
add: Не люблю рекурсию, но пока ничего иного не придумал: Object.prototype.del=function(path, firstThis){
if(arguments.caller==null){
var parent=_root
var firstThis=this
} else {
var parent=path
var firstThis=firstThis
}
for (var i in parent) {
if (parent[i]==firstThis){
delete parent[i]
return null
}
if (typeof(parent[i])=='movieclip' || typeof(parent[i])=='object'){
if (arguments.callee(parent[i], firstThis)==null){
return null
}
}
}
for (var i in _global) {
if (_global[i]==firstThis){
delete _global[i]
return null
}
if (typeof(_global[i])=='movieclip' || typeof(_global[i])=='object'){
if (arguments.callee(_global[i], firstThis)==null){
return null
}
}
}
}
Последний раз редактировалось chingachgoog; 06.05.2008 в 14:00. |
|
|||||
|
listener
|
>>Тем более что они МОГУТ себя удалять ..
во всех приведенных примерах, насколько я смог понять, экземпляры объектов НЕ УДАЛЯЮТ САМИ СЕБЯ, что они делать не могут и не должны по определению. А отдать другому объекту-киллеру ссылку на себя с призывом "вот он я, убей меня быстрее!" - что тут заморочного? всегда так и делают в принципе. то что в прототипе вы прописываете метод del, ничего не меняет по сути, только вносит путаницу и все. |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
не удаляет сам себя а лишь отдает другому объекту (команде) киллеру ссылку на себя с призывом "вот он я, убей меня быстрее!" А замороченного тут только то, что объект не знает ни своего имени ни своего родителя. В чем путаница не понял? |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 207
|
Развивая мысль, может так:
Object.prototype.del=function(LVL)
{
if (LVL == undefined) LVL = _root;
for (var i in LVL)
{
if (LVL[i] == this){delete LVL[i]; return true;}
else if (typeof(LVL[i]) != "function" && this.del(LVL[i])){return true;}
}
return false;
}
mc = _root.createEmptyMovieClip("aaa", 1);
mc.zz = {};
mc.zz.prop="qwerty";
trace(mc.zz+" "+mc.zz.prop);
mc.zz.del();
trace(mc.zz+" "+mc.zz.prop);
|
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Можно и так, если поставить уловитель _global и отсекатель элементарных данных (строки, булевые величины и числа)
|
|
|||||
|
Регистрация: Oct 2005
Сообщений: 207
|
Цитата:
Object.prototype.del=function(LVL)
{
if (LVL == undefined)
{
LVL = _root;
for (var i in _global) if (_global[i] == this){delete _global[i]; return true;}
}
for (var i in LVL)
{
if (LVL[i] == this){delete LVL[i]; return true;}
else if (typeof(LVL[i]) != "function" && this.del(LVL[i])){return true;}
}
return false;
}
Цитата:
Недостаток в коллекцию: |
|
|||||
|
Modus ponens
|
Ей богу, вы занимаетесь ерундой. Не нужно удалять объекты из себя, это не правильно логически и может привести к сбою, например, если вы попытаетесь этот ваш метод вызвать в теле цикла фор-ин. (скорее всего он просто не сработает)
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|