Показать сообщение отдельно
Старый 06.05.2008, 12:35
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 14  
Ответить с цитированием
chingachgoog
Banned
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от GFreemen Посмотреть сообщение
а если так
Та же дыня только сбоку

Код:
...
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
		}
	}
}
...
Т.е. this в данном случае - это тот же _root или любая другая временная диаграмма где находиться метод kill и объект (они должны находиться на одной временной диаграмме). В этом то и главная засада, что объект не знает где он находиться
Но хорошо, что проблема с перекрыванием имен оказалась надуманной мной - переменная типа 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)

Цитата:
Сообщение от wvxvw
Объекты не должны сами себя удалять, это ошибка в дизайне...
А что тут криминального? По-моему вполне законное и удобное желание. Тем более что они МОГУТ себя удалять - только не знают где они находяться.

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.