Avatar billede freesite Nybegynder
10. november 2005 - 14:49 Der er 33 kommentarer og
1 løsning

object orinteret

hej ville lige høre om det er muligt at arbejde object-orinteret i javascript, som det fx er i java.

vil gerne bygge en graf.

har en dokument i javascrip som skal kalde funktioner i andre javascript dokumenter

fx
-------main-----------
<html>
<script>
write.document(a1a.getName()+a1a.getParrentId().getName+a1a.getParrentId().getParrentId().getName());
</script>
</html>

-------a1a.html-------------
<script>
name="Jens";
parrentId=a1.html;

function getName(){
return name;
}
function getParrentId(){
return arrentId;
}
</script>
-------a1.html--------------
<script>
name="Hans";
parrentId=a.html;

function getName(){
return name;
}
function getParrentId(){
return arrentId;
}
</script>

-------a.html--------------
<script>
name="Ole";
parrentId="";

function getName(){
return name;
}
function getParrentId(){
return parrentId;
}
</script>

-------------------output---------------
JensHansOle
----------------------------------------
Håber der er nogen som kan svare på om det kan lade sig gøre, og hvis det kan lige give et lille eksempel over hvordan.
på forhånd tak
Avatar billede olebole Juniormester
10. november 2005 - 15:00 #1
<ole>

Ja, man kan i højeste grad OOP'e i JS. Hvad er det præcist, du gerne vil lave?

/mvh
</bole>
Avatar billede freesite Nybegynder
10. november 2005 - 15:20 #2
jeg er ved at prøve at lave en efterslægtstavle, hvor der skal være mulighed for heletiden at kalde de personer som ligger før, havde tænk på at bygge det op som en graf, med refferencer både til den person(knude) som peger på en (forældre) og de personer(knuder) som man peger på(børn)
Avatar billede freesite Nybegynder
10. november 2005 - 15:21 #3
så dette er en knude

-------a.html--------------
<script>
name="Ole";
parrentId="";

function getName(){
return name;
}
function getParrentId(){
return parrentId;
}
</script>
Avatar billede olebole Juniormester
10. november 2005 - 15:25 #4
Jeg er stadig ikke med på, hvordan det skal bruges. Hvordan skal jeg vide, hvilken person, jeg tager fat i, når jeg kalder getName()?
Avatar billede olebole Juniormester
10. november 2005 - 15:27 #5
Du er nødt til at opstille en præcis model - ellers er det ikke til at give eksempler på, hvad du kan gøre  :)
Avatar billede freesite Nybegynder
10. november 2005 - 15:33 #6
forestiller mig at grafen ser sådanne ud :

                                Jens
            Mads                                      Thomas
      Ole          Hans                      jens              Klaus
Jesper

Hvis man så kigger på parrentId til Jseper vil man få
Ole-Mads-Jens
Avatar billede freesite Nybegynder
10. november 2005 - 15:34 #7
så grafen behøver kun at opererer på parrentId
Avatar billede freesite Nybegynder
10. november 2005 - 15:37 #8
Har lavet nogetligende i java, men er lidt i tvivl om man bare kan kalde de forskellige dokumenter(klasser) uden at bruge denne metode: <script type="text/javascript" src="font.js"></script>
men bare refferer direkte til et dokument(klasse)
Avatar billede olebole Juniormester
10. november 2005 - 15:38 #9
Hvad er parentID? Er det et navn?
Hvorfra kommer det pågældende parentID - og hvordan/hvornår skal det indsættes?

Jeg mangler stadig info om, hvordan det skal bruges.

I JavaScript opereres ikke med klasser. JS er opbygget på basis af prototypes
Avatar billede olebole Juniormester
10. november 2005 - 15:47 #10
- sagt på en anden måde:
OOP er ikke så forskellig i forskellige srpog. 'Kunsten' ligger ikke i koden, men i at opstille modellen for objektet/objekterne ... deres instantiering, slægstsskab og anvendelse  :)
Avatar billede roenving Novice
10. november 2005 - 15:57 #11
Sagt på en anden måde:

Du kan sagtens opbygge et objekt (via en funktion), som kan instatieres mange gange, og bl.a. indeholde properties (variabler), som peger på andre instanser af det samme objekt, men constructoren (funktionen) skal så kaldes med de(n) nødvendige henvisning(er) til (parent-) objekter, og skal prototypes med en funktion, som kan tilføje nye (child-) objekter og f.eks. tildele værdier til andre properties på objektet !-)
Avatar billede olebole Juniormester
10. november 2005 - 16:20 #12
- og <script type="text/javascript" src="font.js"></script> er bare en import af en JavaScript-fil. Det har i sig selv intet med OOP at gøre  :)
Avatar billede freesite Nybegynder
10. november 2005 - 18:43 #13
ok, men jeg behøver jo egentligt ikke tilføje noget de forstellige dokumenter, de skal være statiske, og variablerne i klasserne er konstante
Avatar billede freesite Nybegynder
10. november 2005 - 18:50 #14
men kan du ikke give mig et eksepel med child.

for en klasse
-------main-----------
<html>
<script>
write.document(a1a.getName());
</script>
</html>

-------a1a.html-------------//et nyt dokument
<script>
name="Jens";
parrentId=a1.html;       

function getName(){
return name;
}
function getParrentId(){
return arrentId;
}
</script>
------------------------------------------------
er det helt i skoven?
Hvis det kan lade sig gøre at lave et eksempel noget i stil med ovenstående, bare hvor det virker i javascript, vil det egentligt være nok til at komme igang.
Avatar billede freesite Nybegynder
10. november 2005 - 18:52 #15
det jeg vil er at hente variablen name via getName(), men uden at skulle include den først
Avatar billede olebole Juniormester
10. november 2005 - 20:52 #16
Jeg ved ikke helt, hvor det er, vi taler forbi hinanden. Jeg ved godt, man i f.eks. Java og Visual Studio arbejder med klasser som selvstændige dokumenter - men sådan er JavaScript ikke indrettet.

Derudover vil man jo ikke i Java have en klasse for hver 'familieknude'. Man vil have én klasse, der instantieres for hver knude.

I JavaScript har man et objekt - eller rettere en object-constructor funktion (der sagtens kan stå skrevet i samme dokument som resten af koden). Dette objekt instantieres for hver knude, ved at kalde funktionen med keyword'et 'new'.

Hvordan koden skal struktureres, kommer anpå, hvordan den skal bruges - hvilket jeg stadig ikke aner det første om.

At du skulle have skrevet noget fungerende i Java, undrer mig såre med de forklaringer, du indtil nu har givet. På mig virker det slet ikke, somom du er inde i OOP-tankegangen. Det er ikke en programmatisk øvelse, men en mental - og derfor helt sprog-uafhængig.
Avatar billede freesite Nybegynder
10. november 2005 - 21:25 #17
mit største problem er at jeg ikke kan hente en variabel fra et andet dokument.
fx.
jeg har et dokument som hedder index.html. jeg vil gerne hente variablen name fra a1a.html
----index.html------------
<html>
<script>
document.write((a1a).getName());
</script>
</html>

nyt dokument som hedder a1a,html
----a1a.html---------
<html>
<script>
name="hans";
function getName(){
  return name;
}
</script>
</html>
-----------output bliver--------
hans
Avatar billede freesite Nybegynder
10. november 2005 - 21:26 #18
men er ikke sikker på at den form for kommunikation overhoved kan lade sig gøre i java script
Avatar billede olebole Juniormester
10. november 2005 - 21:41 #19
Nu siger jeg det for sidste gang:
    Fortæl præcis, hvordan det skal bruges!
- ellers spilder du min tid - og så er jeg ude af denne tråd
Avatar billede freesite Nybegynder
10. november 2005 - 22:03 #20
Ok, tror ikke jeg kan forklare det bedre.

1. Grafen bygger jeg selv, ud af et dokument til hver knude, i hvert dokument laver jeg en refference til dens forældre, og nogle refferencer til de knuder som den peger på.
NB, denne knude har kun en forældre
--- overstående vil jeg selv bygge og programmet skal ikke rette i det----------

2. Jeg vil nu have mulighed for at hente variablen som indeholder navnet for den knude jeg kigger på. Samt navnet på forældre -knuden,

mit problem er så :
Jeg ved ikke hvordan man tilgår en variable som er placeret i et dokument, fra et andet dokument.

Kunne forestille mig noget i denne retning

----index.html------------
<html>
<script>
document.write((a1a).getName());
</script>
</html>

nyt dokument som hedder a1a,html
----a1a.html---------
<html>
<script>
name="hans";
function getName(){
  return name;
}
</script>
</html>
-----------output bliver--------
hans

-----------------------------------------------------
Det er muligt det slet ikke kan lade sig gøre i javascript at kommunikere på den måde.
Avatar billede roenving Novice
11. november 2005 - 07:10 #21
Det kan _ikke_ gøres med forskellige html-dokumenter !-)

-- i javascript laver du en objekt-constructor f.eks. sådan:

function myObject(parentNode){
  this.children = new Array();
  if(parentNode)
    parentNode.children[parentNode.children.length] = this;
  this.parent = parentNode ? parentNode : "root";
}

-- så kan man skabe et root-objekt sådan:

var myRoot = new myObject();

-- og instatiere nogle flere børn:

var ch1 = new myObject(myRoot);
var ch2 = new myObject(myRoot);
var ch11 = new myObject(ch1);

-- så vil myRoot indeholde to variabler:

Een tekst-variabel:
myRoot.parent = "root"

-- og et array af objekter:
myRoot.children[0] = ch1,
myRoot.children[1] = ch2

Objektet ch1 vil så indeholde de samme to variabler, men .parent vil pege på root-objektet:

ch1.parent = myRoot

-- og arrayet af børn vil kun indeholde et objekt:

ch1.children[0] = ch11

Håber du kan tygge dig igennem, selv brugte jeg mange år til at forstå ideen i OOP, og det var først da jeg overhovedet blev nødt til at benytte mig af det, at det lykkedes at krølle hjernen rundt til at forstå ideen !-)
Avatar billede olebole Juniormester
11. november 2005 - 14:43 #22
freesite >> Man skal være ret fantasifuld for at få det, du beskriver, til at minde om objekt orienteret programmering ... og det lyder ikke spor hensigtsmæssigt.

Det, roenving viser dig, er OOP - men det efterlader os stadig med problemet: Hvor skal data ligge? At have dem liggende i hver sin fil, lyder ingenlunde særlig hensigtsmæssigt  :)
Avatar billede freesite Nybegynder
11. november 2005 - 15:49 #23
<olebole>
Nej kan godt følge dig, tror det er min title som er rimelig misvisende, det jeg ville var at lave en datastruktur, og mit spørgsmål lød egentligt mest på om det kunne lade sig gøre at hente variabler i et andet html dokument direkte ved fx at skrive

a1.getName();
hvor a1 er navnet på det andet html dokument og getName er en funktion som returnere en string med et navn.

Grunden til at det helst skulle løses på den måde var, at dataerne allerede findes i html dokumenter, og det det er ikke mig som skal indtaste disse dataer.
Avatar billede freesite Nybegynder
11. november 2005 - 16:04 #24
<roenving>
super takker for svar, det løste ikke helt mit problem, men kan se ud fra det du svarede at mit problem faktisk ikke kunne løses på den måde jeg havde tænkt mig i javascript.
Tror istedet jeg vil arbejde med det som du lagde op, og se om der kan findes en løsning som kan lade sig gøre.
overjer fx at læse filerne igennem en efter en og hente dataen og ligge dem ind i et array efter den metode som du beskrev.

!!men det drejer sig om ca 2000 filer med ca 10 linier data, kan du sige om løsningen vil give mig problemer med køretiden.

ved godt det er svært at sige noget om køretid, og vil også bare have et skøn.


Håber du vil ligge et svar
Avatar billede olebole Juniormester
11. november 2005 - 17:10 #25
Hvis der er tale om 2.000 entries, er det en helt oplagt database-løsning  :)
Avatar billede freesite Nybegynder
12. november 2005 - 12:34 #26
<olebole>
Database-løsningen vil betyde at jeg skal bruge mySql-database går jeg ud fra, og da dette program gerne skulle kunne køre både på en windows maskine og en linux server, uden at instalere apache på windows-maskinen.
Er klar over at en database ville være den bedste løsning, men tror ikke det kan overholde overstående krav.

Hvis jeg har forstået det korrekt arbejder javascript i clienten, hvilket betyder at hver gang jeg åbner et nyt dokument skal dataerne hentes hjem over forbindelsen man køre med.

fx. hvis man køre med en forbindelse med 56 kbit/s, vil det for 2000 dokumenter på ca 5 kbyte pr styk tage ((2000*5)/(56/8))/60= 23,8 min at tegne grafen.

har jeg ret i dette.

ps. takker for alt den hjælp ind til videre.
har nok været alt for fedtet med points, men regnede ikke med at det ville blive så omfattende. men kan godt se at det er bliver svært at løse problemet jeg først lagde op til, når det overhovet ikke kan løses på den måde jeg ville. :-)
Avatar billede freesite Nybegynder
12. november 2005 - 12:37 #27
Hvis i vil ligge et svar vil jeg meget gerne give nogle point's til jer begge, så tror jeg lige jeg vil gå i tænkebox igen og tænke de input jeg har fået, godt  igennem, og vende tilbage igen med nogle mere specifikke spørgsmål.

ps takker indtil videre.
Avatar billede olebole Juniormester
12. november 2005 - 16:34 #28
Du kunne jo overveje at lægge data i et platforms uafhængigt format. Således _kunne_ man lægge data i en XML-fil - eller man kunne skrive det i JSON (JavaScript Object Notation) ... et JavaScript-format, som ved festlige lejligheder også kaldes 'fedt-fattigt XML'.
Et XML-dokument kunne være skrevet på formen:

<noder>
    <node>
        <id>1234</id>
        <parid>0</parid>
        <navn>Ole</navn>
        <dato>1955-0707</dato>
    </node>
    <node>
        <id>2345</id>
        <parid>1234</parid>
        <navn>Jesper</navn>
        <dato>1978-0707</dato>
    </node>
</noder>

En JSON-version af samme kunne være:

noder = [
    {"id":1234,
    "parid":0,
    "navn":"Ole",
    "dato":1955-0707},

    {"id":2345,
    "parid":1234,
    "navn":"Jesper",
    "dato":1978-0707},
];

Så fylder filen trods alt ikke så meget - og 'koster ikke så meget' at hente ned. Den kan ligge under enhver platform - og begge kan behandles på klienten.
Er det mon noget, du kan bruge?
Avatar billede freesite Nybegynder
12. november 2005 - 19:15 #29
<olebole>
du kommer jo mit næste spørgsmål i forekøbet, nemlig en snedig måde at løse problemet med at læse filerne.

noder = [{
    "id":1234,
    "parid":0,
    "navn":"Ole",
    "dato":1955-0707
}];

ville du så her bruge en indexOf funktion til at læse dataerne ind.

Det hele må nemlig ikke ligge i en fil, men en fil pr person, ked af, at jeg er lidt besværlig. Tror heller ikke der er en effektiv måde at løse dette problem på. Ikke med de krav der stilles til opbygningen. :-).
Men det smarte er, at de dataer som er / skal indtastes, så også kan ligge i dokumenter som man senere kan læse uden denne hjemmeside, og ikke skal have noget specielt instaleret for at læse.
Avatar billede freesite Nybegynder
13. november 2005 - 00:52 #30
til <olebole>
takker mange gange for kommentare, tror jeg vil se på at sætte mig ind i mysql database, har aldrig arbejdet med sodanne en, så vil ikke lige stille flere spørgsmål før jeg har sat mig ind i hvordan man arbejde med den. tak for besvarelse at mine spørgsmål, det har været til kæmpe hjælp, ind til videre.
fandt ud af en løsning i javascript.
---------------------index.html-----------------------------
<html>

<head>
<title>index</title>
</head>
<script type="text/javascript" src="vertex.js"></script>


<script>
vertexs = new Array();
child = new Array();


function addVertex(a,b,c,d,e,f,g,h){
vertexs[vertexs.length] = new vertex(a,b,c,d,e,f,g,h);
}

function addParent(){
  for(i=0; i<vertexs.length;i++){
    for(j=0;j<vertexs.length;j++){
      if(vertexs[i].parent==vertexs[j].id){    //finder parent og tilføjer den
          vertexs[i].parent=vertexs[j];
      break;                                  //stopper når parent findes
      }
    }
  }
}


function addChild(){
    for(i=0;i<vertexs.length;i++){
        if (vertexs[i].parent)
        vertexs[i].parent.child[vertexs[i].parent.child.length] = vertexs[i];
    }
}



//addvertex(id,name,parent,married,picturer,comments,born,dead,)
addVertex("a","Ole","",new Array("anne"),new Array("b1.jpeg"),new Array("han var bla"),"1922","2000");
addVertex("a1","Jens","a",new Array("b1.jpeg"),new Array("b1.jpeg"),new Array("b1.jpeg"),"1922","2000");
addVertex("a1a","Søren","a1a",new Array("b1.jpeg"),new Array("b1.jpeg"),new Array("b1.jpeg"),"1922","2000");
addVertex("a1a1a","Ole","a1",new Array("b1.jpeg"),new Array("b1.jpeg"),new Array("b1.jpeg"),"1922","2000");
addVertex("a1a1","Hans","a1",new Array("b1.jpeg"),new Array("b1.jpeg"),new Array("b1.jpeg"),"1922","2000");


addParent();
addChild();

function getPerson(a){
document.writeln(vertexs[a].named);
document.writeln(vertexs[a].married[0]);
 
 
  for(i=0;i<vertexs[a].child.length;i++){
    document.writeln(vertexs[a].child[i].named);//.named);//parent.parent.parent.named);
  }
}

getPerson(1);

</script>
<body>
</body>

</html>
-------------------vertex.js-----------------------
function vertex(n,p,t,a,b,c,d,e){
this.id=n;
this.named=p;
this.parent=t;
this.married=a;
this.picture=b;
this.comments=c;
this.born=d;
this.dead=e;
this.child=new Array();
}
-------------------------------------------
ps.
hvis i vil ligge svar begge to vil jeg takke for denne gang og vende tilbage når jeg ved en mere om mysql databasen.

takker for denne gang :-)
Avatar billede olebole Juniormester
14. november 2005 - 00:35 #31
Undskyld, her er sket en del, jeg ikke har fået mail om  :)

Måden at kalde data i JSON-versionen ovenfor er:

noder = [
    {"id":1234,
    "parid":0,
    "navn":"Ole",
    "dato":1955-0707},

    {"id":2345,
    "parid":1234,
    "navn":"Jesper",
    "dato":1978-0707},
];

for (var i=0; i<noder.length; i++) {
    alert(noder[i].navn);
    alert(noder[i].dato);
}

- eller, hvad du nu vil gøre med dem.
Hver person er et objekt - og alle objekterne er lagt i et array. Stort set det samme, som du har lavet  :)

Du kan evt. kikke i denne artikel og læse lidt om array- og objektnotation i JS:
    http://www.eksperten.dk/artikler/227
Avatar billede olebole Juniormester
14. november 2005 - 00:38 #32
Ups ... jeg har lavet en fejl i array'et! Der er komma efter sidste element, hvilket introducerer et ekstra, tomt element ... eller rettere en ekstra tom plads  :)

noder = [
    ...
    ...
    "dato":1978-0707}, <-- Det komma skal slettes
];

- sorry  :)
Avatar billede freesite Nybegynder
14. november 2005 - 21:19 #33
hey, tror lige jeg vender tilbage i database forummet senere, når jeg har prøvet at lave noget med sådanne en.

men kan se fidusen med det array som du har lavet, vil lige prøve at lave noget med det også.

takker for super hjælp, og undskylder den fedtede point-sats skal ikke gentage sig
:-<).
Avatar billede olebole Juniormester
15. november 2005 - 01:13 #34
Mit array er faktisk præcis mage til dit 'vertexs'. Mit er blot skrevet ud i hardcoded version  :)

Tak for points ... og jeg er fint tilfreds med antallet  ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester