Toon posts:

[js oop] vb get let set equivalent

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben object georienteerd bezig in javascript (eigenlijk stiekum Jscript :P) en ik ben op zoek naar de js equivalenten van set let en get in vbscript.

beetje vage omschrijving, maar goed, het is dus om een property van een object te setten (danwel op te vragen) alsof je gewoon een variabele aanspreekt, maar ondertussen wordt er dus een hele functie aangeroepen die vanalles uitvoert en misschien ook wel een variabele set

in delphi gaat dit met read en write als ik me goed herinner

ter illustratie: in vbscript gaat het zo:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
class className
  private aProp
  public property get propName()
    propName = aProp
    'rest functie
  end property
  public property let propName(prop)
    aProp = prop
    ' rest functie
  end property
end class


hoewel het om serverside Jscript gaat, toch hier denk ik omdat dit het javascript domein is

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 23-08 09:52

Pelle

🚴‍♂️

Euh.. kun je dit niet met prototyping voor elkaar krijgen?

code:
1
2
3
4
5
6
7
8
9
function className() {
    this.set = function(a) {
        this.propName = a;
        // do other stuff
    }
    this.get = function() {
        // enz
    }
}

Verwijderd

Topicstarter
is niet helemaal wat ik bedoel, ik vraag me voornamelijk af of dergelijke functionaliteiten in javascript zitten eigenlijk, zoniet dan werk ik er wel omheen.

Wat ik heb is een columnText object, met daarbinnen een text object dat (jawel) text bevat.

de text van het columnText object is dus te bereiken met columnText.text.content = 'een stukkie text'

nu wil ik eigenlijk een "property" text in columnText hebben die dus de waarde die ie krijgt doorgeeft aan die child en andersom dat ie hem uitleest als ie gevraagd wordt, da's dus in vbscript (en ook delphi en vast ook in andere talen) zo te maken en ergens verwacht ik een beetje dat dit in javascript ook moet kunnen

(anders kan jouw manier natuurlijk dan heb je gewoon columnText.setText(string) voor setten en columnText.getText() voor getten ofzo)

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

oh,when?

...

Pelle schreef op 08 februari 2003 @ 13:48:
Euh.. kun je dit niet met prototyping voor elkaar krijgen?

code:
1
2
3
4
5
6
7
8
9
function className() {
    this.set = function(a) {
        this.propName = a;
        // do other stuff
    }
    this.get = function() {
        // enz
    }
}
wat je nu eigenlijk doet is een statis method aanmaken aan de class, die in elke instance van die class beschikbaar is. het kan wel wat je doet, maar waarschijnlijk bedoel je:

JavaScript:
1
2
3
4
5
6
7
8
function foo() {
}

foo.prototype.setName = function() {
}

foo.prototype.getName = function(strName) {
}


:)

[ Voor 18% gewijzigd door oh,when? op 08-02-2003 17:21 ]

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


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 23-08 09:52

Pelle

🚴‍♂️

oh,when? schreef op 08 February 2003 @ 17:20:
wat je nu eigenlijk doet is een statis method aanmaken aan de class, die in elke instance van die class beschikbaar is. het kan wel wat je doet, maar waarschijnlijk bedoel je: [knip]


Ja klopt, maar ik deed het op deze manier om de paralel met mophor's vbscript te trekken. Het is performancetechnisch gezien niet de beste oplossing iig :)

Verwijderd

Topicstarter
dat dit mogelijk is weet ik en pas ik nu ook toe, maar er lijkt dus niet zo iets te bestaan als ik beschreef?
/me hoopt nog een beetje op een woord van clay of crisp, dan hebben we de belangrijkste oop javascript guru's wel gehad geloof ik(nofi to anyone if forgotten :P)

Verwijderd

Volgens mij bedoel je het gebruik van getters en setters in javascript.
Hier staat er iets over uitgelegd:
http://webfx.nu/dhtml/mozInnerHTML/mozInnerHtml.html
Werkt dus niet in IE. Daar kun je gebruik maken van onpropertychange.
Verder weet ik er niets van.

Verwijderd

Topicstarter
juist! puntje voor Martijn22.
Alleen gebruik ik serverside JScript, is effe een testje waard, maar ik heb eigenlijk weing hoop....

edit:
Microsoft JScript compilation fout '800a03eb'

Expected ':'

/url/jscriptgetter.asp, regel 6

name getter : function () {this.reads++; return _name;},

nee dus :'( die vlieger ging dus niet op.


Edit 2:
na zoeken op de keywords Jscript getter en setter:
vlieger gaat wel op: http://msdn.microsoft.com...ssCreation.asp?frame=true

en ineens ontdek je dat e in JScript ook classbased objecten hebt en niet alleen prototype based. En ze zijn een stuk flexibeler en ondersteunen dus ook set en get
dit was even voor de geinteresseerden

[ Voor 94% gewijzigd door Verwijderd op 08-02-2003 18:09 ]


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Ben je nou in JScript of in JScript.NET bezig?

| Toen / Nu


Verwijderd

Topicstarter
JScript atm, die msdn link gaat idd over .net

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

Clay

cookie erbij?

Op zich maakt het toch niet uit of je nou een getter/setter maakt, of een methode die de waarde aanpast en daarbij andere dingen doet? Het lijkt mij meer een voorkeur die je al dan niet hebt, want hoe je het ook maakt, ergens komt die 'restcode' die die andere dingen voor je doet die je wil zien gebeuren naast het setten/getten van die var = 'waarde'. Eigenlijk vertroebel je je code er dus mee, en waarschijnlijk wordt het ook meer.

Dan vind ik zelf een getWaardeNaam() en setWaardeNaam() methode veel 'netter', net als dat ik bij een element nooit:

code:
1
<td/div onmouseover="this.style.attribuut = 'waarde'" ..   >


zou doen, gewoon omdat dat geen centrale, generieke en overzichtelijke manier is om het te doen (hoewel dit voor een eigen setter/getter net iets anders ligt). Een textObject zou ik dus gewoon een setContent(strContent) methode geven (oid) en die laat dat dan zien waar dat allemaal nodig is.

Maar het blijft dus mijns inziens gewoon een voorkeur.

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


Verwijderd

Clay schreef op 09 February 2003 @ 13:01:
code:
1
<td/div onmouseover="this.style.attribuut = 'waarde'" ..   >
Helaas is je bovenstaande voorbeeld vele malen sneller dan generieke voorbeelden. Zou je bijvoorbeeld this.className gebruiken dan krijg je een enorme overhead in IE browsers. Hier heb ik wel eens een thread over gestart in het verleden.

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

oh,when?

...

Clay schreef op 09 February 2003 @ 13:01:
Dan vind ik zelf een getWaardeNaam() en setWaardeNaam() methode veel 'netter', net als dat ik bij een element nooit:

[..]

Maar het blijft dus mijns inziens gewoon een voorkeur.
erm nou nee...volgens mij leert iedere 1ejaars informatica student die OO leert programmeren dat je nooit direct de eigenschappen van een object mag aanspreken maar alleen via zijn methods mag benaderen. Termen als interface, black box, layering etc komen naar boven maar dat is iets voor de nerds van hiernaast, /14. Als je daar ooit per ongeluk terechtkomt, beteken je dat je in een verloren uithoek van got terecht bent gekomen, waar bleke mensen zonder sociaal leven, alleen kunnen praten over haakjes, punt komma's, 'semantiek' etcetera... ;)

maar het is geen voorkeur..het is een van de principes van OO programmeren, in welke taal je dat ook doet. :)

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


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

Clay

cookie erbij?

oh,when? schreef op 09 February 2003 @ 15:48:
[...]
erm nou nee...volgens mij leert iedere 1ejaars informatica student die OO leert programmeren dat je nooit direct de eigenschappen van een object mag aanspreken maar alleen via zijn methods mag benaderen. Termen als interface, black box, layering etc komen naar boven maar dat is iets voor de nerds van hiernaast, /14. Als je daar ooit per ongeluk terechtkomt, beteken je dat je in een verloren uithoek van got terecht bent gekomen, waar bleke mensen zonder sociaal leven, alleen kunnen praten over haakjes, punt komma's, 'semantiek' etcetera... ;)

maar het is geen voorkeur..het is een van de principes van OO programmeren, in welke taal je dat ook doet. :)
Ja maar volgens mij is dat in dit geval toch net iets anders. Ik heb dat idd ook zo geleerd ooit :) dat je geen (public) eigenschappen van een object moet aanpassen zonder daar een methode voor te bakken, maar in dit geval maak je in plaats van een get/setWaardeNaam() methode een setter/getter aan, die in principe hetzelfde doet als ie set/get methode. Je bent niet zomaar een waarde aan het aanpassen.
Helaas is je bovenstaande voorbeeld vele malen sneller dan generieke voorbeelden. Zou je bijvoorbeeld this.className gebruiken dan krijg je een enorme overhead in IE browsers. Hier heb ik wel eens een thread over gestart in het verleden.
Da's dan de tragiek van netjes scripten :) Hoewel vies en snel denk ik vaak wel sneller is dan een nette generieke oplossing.

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

Pagina: 1