webForumDet fria alternativet

ta bort objekt samt alla dess properties

4 svar · 499 visningar · startad av oGGo

oGGoMedlem sedan apr. 2003120 inlägg
#1

Hej.
Jag sitter här och försöker bygga en liten funktion som skall ta bort ett objekt men lyckas inte riktigt som jag vill.
Går det öht. att ta bort ett objekt med alla dess properties eller behöver man behålla objektet men ta bort alla properties på det?

Exempel:
Mitt Objekt:

function Test()
{
	this.element = document.createElement("DIV");
	this.element.innerHTML = "Jag ar element ett.";
	 
	document.addEventListener("mousemove", this.mousemovement, true);
	this.mousemovement = function(event)
	{
		// känn av mousemoves på sidan
	}
	
	
	this.testMetod = function()
	{
		// do some stuff
	}
	this.testMetod2 = function()
	{
		// do some other stuff
	}
}

var testObj = new Test();

Nu vill jag förstöra objektet & har försökt..

delete x;

..samt..

for(obj in x)
{
	delete obj;
}

.. båda två utan framgång.

Hur är egentligen det bästa sättet att ta bort ett objekt utan att "hårt" koda in alla properties man vill ta bort i en deletemetod?

/oGGo

spangoMedlem sedan juni 20008 205 inlägg
#2

Varför vill du göra så? Ta bara bort alla referenser till det så sköter garbage collectorn resten.

oGGoMedlem sedan apr. 2003120 inlägg
#3

spango skrev:

Varför vill du göra så? Ta bara bort alla referenser till det så sköter garbage collectorn resten.

I just mitt fall så fungerar det inte så.. referenserna tas inte bort på ex. document mm. där jag lägger till vissa av mina objekt/element som jag genererar upp i min klass. Således vill jag loopa igenom alla Properties i min klass och ta bort dem, så frågan kvarstår. Går detta?

Jag har idag en metod this.destroy = function() som sköter all borttagning manuellt, vilket jag inte önskar.

Om man gör en loop som:

for(var obj in this)
{
	console.log(obj);
}

får man fram alla sina properties och metoder, men dessa är ju skrivna som string.. man måste ju kunna få fram dem som de objekt de är (och köra delete på dem), eller? :l

Tack på förhand,

oGGo

edit:

Nu är jag med på vad du menar.. my bad!
Problem solved!

/oGGo =)

spangoMedlem sedan juni 20008 205 inlägg
#4

oGGo skrev:

får man fram alla sina properties och metoder, men dessa är ju skrivna som string.. man måste ju kunna få fram dem som de objekt de är (och köra delete på dem), eller?

En fiffig sak med javascript är att all objekt är associativa arrayer, så foo.bar kan också skrivas foo["bar"] vilket gör att följande lilla snutt är guld när man ska debugga:

function introspect(obj){
    var s = "";
    for (var i in obj) s += i + " \t " + obj[i] + "\n";
    return s;
}

Så, vips, får man hela objektet listat för en. (y)

oGGoMedlem sedan apr. 2003120 inlägg
#5

spango skrev:

En fiffig sak med javascript är att all objekt är associativa arrayer, så foo.bar kan också skrivas foo["bar"] vilket gör att följande lilla snutt är guld när man ska debugga:

function introspect(obj){
    var s = "";
    for (var i in obj) s += i + " \t " + obj[i] + "\n";
    return s;
}

Så, vips, får man hela objektet listat för en. (y)

Aha, att det var så enkelt att objekt var byggda på associativa arrayer visste jag icke om.
Jag tackar ödmjukast, detta har underlättat för mig avsevärt.

Tack, tack, tack!

/oGGo

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)