Permalänk
Medlem

Javascript och websidor

Jag är relativt grön på java men försöker förstå hur det fungerar. Jag har en java kod som till stor del är skriven av en annan som jag få ändra på. Jag har nu stött på en sån sak som jag tror att är någon form av subfunktion till en parent funktion.

Dvs. jag har en funktion som deklarerats

function master() { ***kod***}

Det följs av ett flertal instanser som ser ut som då en form av sub funktioner till "master", t.ex.

master.prototyp.fixa = function() { ***kod*** }
master.prototyp.testa = function() { ***kod*** }

Har jag förstått rätt att de senare nämnda är någon form av subfunktion till "master". Jag ser att i de flesta instanser så används variabler från "master" genom this.[variabel namn]. Kan någon vägleda mig till var jag hittar information, sökte på google men vet inte riktigt vad det är jag exakt skall söka på.

Mitt riktiga problem är att jag försöker skapa en egen "sub funktion", typ

master.prototyp.change = function() { ***kod*** }

Jag kan kalla på den funktionen t.ex. med en knapp och onClick="master.prototype.change()" och får den att göra ändring i t.ex. ett text fält. Men när jag försöker få information av "master" variabler till en sub funktions egen variabel så får jag ständigt felmeddelande att sub variabeln inte är deklarerad i det skede som jag vill använda den.

Hoppas någon har en aning om vad jag försöker säga och skulle kunna ge en knuff i rätt riktning

Permalänk
Medlem

Det här är definitivt JavaScript och inte Java. Ändra inlägget för att minska förvirring.

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem
Skrivet av LemonIllusion:

Det här är definitivt JavaScript och inte Java. Ändra inlägget för att minska förvirring.

Bra point! Ändrat

Permalänk
Medlem

@warzo: funktioner som är deklarerade i master.prototype måste anropas så här för att få tillgång till master's variabler:

master.prototype.nyfunktion = function() {}; var test = new master(); test.nyfunktion();

Om det är statiska funktioner du är ute efter så borde du lägga dem som t.ex master.statiskfunktion = function() {}; men då kommer du inte heller åt variabler som inte är statiska på objektet.

Hoppas jag var till någon hjälp.

MVH Freezer

Visa signatur

5900x ][ MSI B550 Tomahawk ][ 32 GB@3200C14 ][ Asus 3060ti ][ Samsung 980Pro 1TB + 2x Crucial MX300 1TB ][ Corsair HX1000i ][ Corsair 400Q ][ Asus MG278Q ][ Noctua NH-U12A

Permalänk
Medlem
Skrivet av Freezer:

@warzo: funktioner som är deklarerade i master.prototype måste anropas så här för att få tillgång till master's variabler:

master.prototype.nyfunktion = function() {}; var test = new master(); test.nyfunktion();

....

MVH Freezer

Vad jag söker är att i master.prototype.nyfunktion = function() {}; få en variabel för användning.

Något typ

master.prototype.nyfunktion = function() { var nyVariabel = master.variabel; };

Vet inte om jag riktigt får fram exakt vad det är jag är ute efter på rätt sätt. Och i det här fallet skulle nyVariabel behöva kunna vara en array vid behov.

Permalänk
Medlem

@warzo: Vet inte om jag förstår dig rätt men om du sätter t.ex master.variabel = [0, 10]; så kommer master.variabel alltid vara = [0, 10] oavsett var du anropar den. Vill du däremot ha olika värden på olika instanser utav master så får du sätta this.variabel = [0, 10]; någonstans inne i en funktion i master.prototype.
Javascript har inga typade variabler utan de kan innehålla vad som helst, master.variabel = 0; master.variabel = ['sträng']; fungerar t.ex båda två utan några problem.

Hjälpte det något?

MVH Freezer

Visa signatur

5900x ][ MSI B550 Tomahawk ][ 32 GB@3200C14 ][ Asus 3060ti ][ Samsung 980Pro 1TB + 2x Crucial MX300 1TB ][ Corsair HX1000i ][ Corsair 400Q ][ Asus MG278Q ][ Noctua NH-U12A

Permalänk
Medlem

@Freezer:

Du börjar vara på rätt spår skulle jag säga. Det som du skrev hjälpte inte direkt men för att förtydliga mig själv lite så ser mitt problem ut som följande.

function master() { var mastervariabel = [1, 8, 10]; } master.prototyp.nyfunktion = function() { var nyvariabel = this.mastervariabel; }

Men när jag sedan anropar nyvariabel inne i master.prototyp.nyafunktionen så får jag felkoden att nyvariabel aldrig aldrig är deklarerad.

Typ:

master.prototyp.nyfunktion = function() { var nyvariabel = this.mastervariabel; document.getElementById('värdet').value=nyvariabel; <--- denna linje ger felkod att nyvariabel aldrig är deklrarerad. }

Däremot om jag tar bort raden ovan som skall hämta in nyvariabel från parent funktionen och iställe deklarerar dit ett värde t.ex. 5 så finns värdet där. Så av någon anledning så får jag inte mastervariabel värdena in i min nydeklarerade variabel. Hänger du med i vad jag försöker säga.. låter oredigt i mitt huvud, men jag kommer inte på ett bättre sätt att förklara det.

Jag tackar för ditt tålamod att försöka hjälpa mig här!

Permalänk
Medlem

@warzo: Jag hänger inte riktigt med på vad det är du försöker göra men här är iallafall två exempel på hur du ska kunna använda mastervariabel:

#1:

function master() { this.mastervariabel = [1, 8, 10]; }; master.prototype.nyfunktion = function() { var nyvariabel = this.mastervariabel; console.log(nyvariabel); }; var test = new master(); test.nyfunktion();

#2:

function master() {}; master.mastervariabel = [1, 8, 10]; master.prototype.nyfunktion = function() { var nyvariabel = master.mastervariabel; console.log(nyvariabel); }; var test = new master(); test.nyfunktion();

I exempel #1 så sätts mastervariabel till [1, 8, 10] på alla nya instanser utav 'klassen' master och man kommer åt den via this.mastervariabel i funktioner som finns inuti master.prototype. Går även bra att sätta den till något helt annat värde via this.mastervariabel.
I Exempel #2 så sätter jag en statisk variabel (mastervariabel) till värdet [1,8,10] och man kommer åt variabeln via master.mastervariabel och den är samma vilken instans du än har. Ändrar du värde på den så kommer det ändras för alla instanser utav klassen master så att säga.

Jag skulle dock inte rekommendera att du anropar nyfunktion via master.prototype.nyfunktion() utan på en ny instans utav master() som jag gör i exempel #1. Vill du hellre ha statiska funktioner så kan du göra så här:

function master() {}; master.mastervariabel = [1, 8, 10]; master.nyfunktion = function() { var nyvariabel = master.mastervariabel; console.log(nyvariabel); }; master.nyfunktion();

Vet inte om du blev mycket klokare nu heller men kanske!

MVH Freezer

Visa signatur

5900x ][ MSI B550 Tomahawk ][ 32 GB@3200C14 ][ Asus 3060ti ][ Samsung 980Pro 1TB + 2x Crucial MX300 1TB ][ Corsair HX1000i ][ Corsair 400Q ][ Asus MG278Q ][ Noctua NH-U12A

Permalänk
Medlem

@Freezer:

Yes, jag tror att du har svarat på min fråga, jag behöver bara läsa på och testa mig framåt från det här.

Tack så mycket för informationen!

Permalänk
Medlem

@warzo: Roligt att mina exempel hjälpte. Lycka till!

MVH Freezer

Visa signatur

5900x ][ MSI B550 Tomahawk ][ 32 GB@3200C14 ][ Asus 3060ti ][ Samsung 980Pro 1TB + 2x Crucial MX300 1TB ][ Corsair HX1000i ][ Corsair 400Q ][ Asus MG278Q ][ Noctua NH-U12A