webForumDet fria alternativet

Att ge sitt objekt en metod

4 svar · 561 visningar · startad av Troxy

TroxyMedlem sedan mars 20041 505 inlägg
#1

Hejsan. Jag håller på och testar lite objektorientering i Javascript.
Är det någon praktiskt skillnad på följande två kodexempel?

function foo() {
	this.bar = function() {
		alert('hello world');
	};
}
function foo() {
	this.bar=bar;
	function bar() {
		alert('hello world');
	}
}

Vad är skillnaden?
Vilket är att föredra?
Är detta endast en smaksak?

spangoMedlem sedan juni 20008 205 inlägg
#2

Det är ingen skillnad ur klassens perspektiv (i båda fallen får den ju sin bar()), men i det senare exemplet deklarerar en funktion i det globala namnutrymmet, (d.v.s., du kan anropa bara bar() utöver dinFoo.bar()) medan den är anonym i den förra. Jag skulle nog rekommendera den första varianten, det finns ju normalt ingen anledning till varför man skulle vilja använda en funktion både som metod och som en vanlig funktion. Syftet blir klarare om du använder den anonyma funktionen.

TroxyMedlem sedan mars 20041 505 inlägg
#3

Mycket bra förklarat!
Nu förstår jag skillnaden :)
Tack!

nitro2k01Medlem sedan aug. 20039 342 inlägg
#4

Spango: Jag håller ej med dig! I det första exemplet sätts index bar i objektets hashlista till en anonym funktion. (Anonym kallas den för att den inte har något namn) Detta gör att du kan komma åt funktionen internt och externt med objektreferens.bar(); (Där objektreferens t ex kan vara this i lämpliga fall)
Vad jag inte håller spango om är vad exempel 2 gör.
bar finns i detta fall inte i det globala namnutrymmet. raden this.bar=bar; gör att exempel 2 gör allt som exempel 1 gör. Sättet bar definieras på, gör dessutom bar tillgänglig i foo's namnutrymme. Detta gör att du kan kalla på den direkt med bar från andra funktioner definierade i foo. Genom att definiera en funktion i en klass utan att lägga till den i hashlistan (Ja, foo agerar klass i det objekt-orienterade språket javascript) så kommer du bara åt den inom klassen, du har alltså skapat en privat metod, som inte går att komma åt direkt utifrån.

spangoMedlem sedan juni 20008 205 inlägg
#5

Just ja, så var det faktiskt. My bad.

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