Цитата:
Сообщение от 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
}
}
}
}
Вроде убивает все и вся.