[js] Object based scripten

Pagina: 1
Acties:
  • 132 views sinds 30-01-2008
  • Reageer

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
Ik ben laatst in een boek wat tegengekomen wa'k nog niet wist, maar wat toch wel errug handig is. In javascript kan je je eigen objecten maken, maar tot nu toe wist ik niet dat je ook aan overerving kon doen. Je kan dus van objecten een soort sub en super objecten maken, waarin overerving gewoon werkt!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//super object
function mySuperObject() {
   this.message = "hoi";
}

// object functie toewijzen
mySuperObject.prototype.broadcast = doBroadcast;

   function doBroadcast() {
    alert(this.message);
   }

// sub object
function mySubObject() {
   // stuff
}

// dit doet het um
mySubObject.prototype = new mySuperObject();

// en gebruiken
myObject = new mySubObject();
myObject.broadcast();

mySubObject is hier helemaal leeg, en toch heeft die de functionaliteiten van het superObject meegekregen :D en er kunnen toch op de gewone manier meer functies en eigenschappen aan toegewezen worden. Misschien is het wat wazig en abstract, maar het is zeker wel hadig. *D

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Misschien is het wat wazig en abstract
:) voor mij wel iig geval

weet je ook een goede tutorial over JS Objects te vinden op Inet ? (of iemand anders)

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Clay, misschien is het een optie om op de Flashcoders list in te schrijven. Dit gaat dan wel over Actionscript (direct afgeleid van ECMAScript-262 ) maar op deze lijst gaan ze diep in over object overerving (inheritance) , statische classes, superclasses in Actionscript ( een methode om Java's super keyword te simuleren ), inheritance van custom classes, etc ,etc.

Daarnaast is deze link ook altijd handig als naslagwerk:

Object Oriented ActionScript

HTH :)

"You're only as good, as what you did last week."


Verwijderd

JS trekt steeds meer naar Java zelf vinnik.

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Op donderdag 01 november 2001 12:06 schreef Tizzwat het volgende:
JS trekt steeds meer naar Java zelf vinnik.
oei..laat mbravenboer dit maar niet horen ;)

"You're only as good, as what you did last week."


Verwijderd

Hmmmmm...cool. Ik wist wel dat zoiets kon, maar heb nooit echt de moeite genomen om het uit te zoeken. Thanks.

Is er ook een manier om uit te zoeken voor een object, welke subObjecten hij heeft?

Ik zie dat je toch ook maar bent overgestapt op prototyping voor methods?

Verwijderd

Op donderdag 01 november 2001 13:03 schreef oh,when? het volgende:

[..]

oei..laat mbravenboer dit maar niet horen ;)
Ik zou niet weten waarom niet..

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
Op donderdag 01 november 2001 17:37 schreef Blues het volgende:
Hmmmmm...cool. Ik wist wel dat zoiets kon, maar heb nooit echt de moeite genomen om het uit te zoeken. Thanks.

Is er ook een manier om uit te zoeken voor een object, welke subObjecten hij heeft?

Ik zie dat je toch ook maar bent overgestapt op prototyping voor methods?
Ik wist ook niet dat het kon :D
Subobjecten van objecten zal je denk ik echt zelf moeten inbouwen, bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// arraytje met objecten
document.obj = new Array();

// object
function myObject(id, nest) {
   this.id = id;
   this.children = [];

   this.parent = document.obj[nest] || null;
   if(this.parent) {
    this.parent.children[this.parent.children.length] = this;
   }

   document.obj[this.id] = this;
   document.obj[document.obj.length] = this;
}


var objOne = new myObject('test1');
var objTwo = new myObject('test2', 'test1');

alert('parent van obj2: ' + objTwo.parent.id);
alert('child[0] van obj1: '+objOne.children[0].id);

en vaste pagina objecten zitten dacht ik zowiezo al in een soort parent/child boomstructuur.

En ik ben idd overgestapt op prototyping. Is zoveel efficienter, vreet ook stukken minder geheugen bij veel objecten.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • paragon
  • Registratie: April 2000
  • Laatst online: 10-09 05:50
Wat is dat prototyping dan precies. Ben namelijk net pas begonnen met objecten in javascript.

http://paragonxls.xs4all.nl/WebTest/slideText.html

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Op zich leuk gevonden, maar of het echt bruikbaar is?

In principe kan je in vrijwel elke general-purpose programmeertaal wel object-georienteerd programmeren. Zelfs in functionele talen kan je nog een object-georienteerde manier werken (net als dat je in een OO-taal ook functioneel kunt werken :) ). Maar voor een echt zinnig gebruik moet de taal object-georienteerd werken ook aantrekkelijk maken.

Ik ken deze aanpak helaas te slecht om er echt iets over te kunnen zeggen, maar toch een aantal punten:

0. Als je een 'klasse' een 'methode' wilt geven, kan deze dan van de instantie variabelen gebruik maken zonder dat de referentie van het object meegegeven hoeft te worden? Zo nee -> OO is een hack zoals OO-gebruik in alle niet OO-talen.

1. Overerving is aardig, maar hoe zit het met overriding? Geen overriding -> slechte mogelijkheden voor specialisatie

2. Verwijst de self reference (this) van een 'object' ook naar de echte instantie van het object? Als je een methode aanroept op de this reference, werkt overriding dan?

3. Geen interfaces

4. Geen abstracte methoden

5. Geen groepering van functionaliteit (methoden)

6. Runtime type informatie?

Om het even samen te vatten:
Het is aardig gevonden dat je dit op deze manier kunt implementeren in javascript, maar zoals altijd geldt bij alle talen: een taal functioneert alleen goed als je hem gebruikt op de manier zoals hij bedoelt is. Op deze manier is javascript (denk ik) niet bedoeld en dus werkt het niet prettig. Het blijft dus een nep-OO-implementatie zoals je ook in veel andere niet-OO-talen kunt doen.

Maar het is wel een erg leuk experiment en ik ben ook wel benieuwd hoever je kunt komen (zie m'n punten ;) ).

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Tizzwat: Ik zou niet weten waarom niet..
Omdat Java ontworpen is om een OO-manier van werken zo makkelijk mogelijk te maken. Als dit op Java lijkt is dat zeker geen compliment voor het succes van deze opzet ;) . Verder is Java natuurlijk ontzettend veel meer dan Javascript++ (net als Javascript geen Java-- is), maar dat besef je zelf vast ook wel :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
Op vrijdag 02 november 2001 02:06 schreef mbravenboer het volgende:
Op zich leuk gevonden, maar of het echt bruikbaar is?

In principe kan je in vrijwel elke general-purpose programmeertaal wel object-georienteerd programmeren. Zelfs in functionele talen kan je nog een object-georienteerde manier werken (net als dat je in een OO-taal ook functioneel kunt werken :) ). Maar voor een echt zinnig gebruik moet de taal object-georienteerd werken ook aantrekkelijk maken.

Ik ken deze aanpak helaas te slecht om er echt iets over te kunnen zeggen, maar toch een aantal punten:

0. Als je een 'klasse' een 'methode' wilt geven, kan deze dan van de instantie variabelen gebruik maken zonder dat de referentie van het object meegegeven hoeft te worden? Zo nee -> OO is een hack zoals OO-gebruik in alle niet OO-talen.
Dat kan. Een object defineer je gewoon als function, maar een new object() wordt wel degelijk een instantie van die functie. Het refereren naar andere methoden en variabelen van het object binnen object specifieke functies zal je echter altijd met this.variabele of objectNaam.variabele moeten doen.
1. Overerving is aardig, maar hoe zit het met overriding? Geen overriding -> slechte mogelijkheden voor specialisatie
Javascript is een Object Based taal :) niet Object Oriented. Overriding kan idd niet, en ik denk dat jij het verschil tussen object based en object oriented beter weet dan ik :D Het aantal argumenten van een functie is niet belangrijk, en er wordt niet op gechecked door js. 2 functies met dezelfde naam kan ook niet, omdat alles in js (in een of andere vorm, ik dacht dat een functie gewoon een instantie is van het object Function) een object is, en 2 objecten met dezelfde naam kan niet.
2. Verwijst de self reference (this) van een 'object' ook naar de echte instantie van het object? Als je een methode aanroept op de this reference, werkt overriding dan?
this. verwijst idd naar de instantie van het gedefineerde object. En als je dus methodes binnen object specifieke methodes aanroept met this.methode() blijf je binnen dat object werken.
3. Geen interfaces
4. Geen abstracte methoden
5. Geen groepering van functionaliteit (methoden)
3 en 4 zeggen mij vrijwel niets :D maar groepering van functionaliteiten kan opzicht (denk ik, als dat het is iig) wel. je kan object specifieke methodes namelijk ook BINNEN de object methode defineren, al moet je nog wel een referentie zetten:
code:
1
2
3
4
5
6
7
8
9
10
11
function myObject(id) {
   this.id = id;
   this.manipuleer = manipuleer;

   function manipuleer() {
    alert(this.id);
   }
}

dinges = new myObject('oi');
dinges.manipuleer();

Nadeel hiervan is wel dat die referentie voor elke instantie van het object opnieuw gezet wordt, en met veel object methoden is dit veel trager dan met prototype.
6. Runtime type informatie?
Tot op zekere hoogte is daar veel mee te doen. Je kan bijvoorbeeld je eigen console object maken, met een window en een textarea, en vervolgens events vangen.
window.onerror bijvoorbeeld kan je een functie aanhangen, die krijgt standaar 3 argumenten mee dan, de fout, de regel waarin het fout ging, en het bestand waarin het fout ging.

Ook kan je al je methode code in try {} catch(error) {} constructies plaatsen. De error die daaruit komt is een wazig object waarmee je met een trucje alle info kan uitlezen.
Maar hoe ingewikkeld wil je je js maken dat je dit soort kunstgrepen nodig hebt? :D
Om het even samen te vatten:
Het is aardig gevonden dat je dit op deze manier kunt implementeren in javascript, maar zoals altijd geldt bij alle talen: een taal functioneert alleen goed als je hem gebruikt op de manier zoals hij bedoelt is. Op deze manier is javascript (denk ik) niet bedoeld en dus werkt het niet prettig. Het blijft dus een nep-OO-implementatie zoals je ook in veel andere niet-OO-talen kunt doen.

Maar het is wel een erg leuk experiment en ik ben ook wel benieuwd hoever je kunt komen (zie m'n punten ;) ).
Js is dus object Based, en tot op zekere hoogte is dit wel zo bedoeld, maar je moet het ook eigenlijk niet vergelijken met echte prog talen.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Op donderdag 01 november 2001 23:37 schreef paragon het volgende:
Wat is dat prototyping dan precies. Ben namelijk net pas begonnen met objecten in javascript.

http://paragonxls.xs4all.nl/WebTest/slideText.html
heheh .. als ik een paar keer heb gemoved, dan begint dat ding te schudden als een gek :) wel een kool effect, maar is vast niet de bedoeling

  • Yo-L
  • Registratie: December 2000
  • Niet online
Op vrijdag 02 november 2001 13:20 schreef r0bert het volgende:

[..]

heheh .. als ik een paar keer heb gemoved, dan begint dat ding te schudden als een gek :) wel een kool effect, maar is vast niet de bedoeling
Gebeurt alleen als je tijdens 't Scrollen een andere scrollMethode aanroept volgens mij.. Dus eerst scrollUp en dan gelijk scrollDown down :)

  • paragon
  • Registratie: April 2000
  • Laatst online: 10-09 05:50
Das nu opgelost :) nog niet netjes maar dat komt zo wel :)

Nu is ie netjes. Maar even een vraagje stel ik heb: var tmr = 0;

Als ik dan: if(tmr) doe geeft ie dan false?

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Topicstarter
yup, 0, null, en undefined geven allemaal false terug als je ze zo in een if() gebruikt.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin

Pagina: 1