[js] object probje

Pagina: 1
Acties:

  • Skaah
  • Registratie: Juni 2001
  • Niet online
JavaScript:
1
2
3
4
5
6
7
8
function Wizard(var1,var2) {
 this.var1 = var1;
 this.var2 = var2;
 this.update = wizardUpdate;
 // enz
}

tmp = new Wizard(1,2)

Ik zoek een methode ofzo die een string returned met daarin de naam van de variabele die de nieuwe Wizard() bevat, in dit voorbeeld dus 'tmp'.

Maar ik weet niet hoe, en de Microsoft Windows Script V5.6 Documentation bevat ook al geen antwoord...

[ Voor 4% gewijzigd door Skaah op 20-07-2003 17:48 ]


Verwijderd

Skaah schreef op 20 July 2003 @ 17:47:
Ik zoek een methode ofzo die een string returned met daarin de naam van de variabele die de nieuwe Wizard() bevat, in dit voorbeeld dus 'tmp'.
Kan niet. Je zult het op een andere manier op moeten lossen. Wat wil je precies met die naam doen?

  • Skaah
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 20 juli 2003 @ 18:02:
[...]

Kan niet. Je zult het op een andere manier op moeten lossen. Wat wil je precies met die naam doen?
HTML code neerschrijven die een methode van het script aanroept.

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 21-08 10:46
Skaah schreef op 20 July 2003 @ 20:12:
HTML code neerschrijven die een methode van het script aanroept.
URL? Misschien kunnen we betere suggestie geven ;).

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

McVirusS schreef op 20 juli 2003 @ 20:18:
[...]


URL? Misschien kunnen we betere suggestie geven ;).
Denk het niet.. dit is namelijk een van de problemen met JS en dan voornamelijk met het gebruik van dingen als eval(), setInterval() en setTimeout, welke op globaal niveau uitgevoerd worden...

Enige wat je kunt doen is de aanroep zo maken:

code:
1
2
3
4
5
6
function Wizard  (name, var1, var2)  {
     this.name = name;
     etc...
}

tmp = new Wizard ('tmp', 1, 2);


Helaas :)

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

Clay

cookie erbij?

Een object kent de variabele waar hij "inzit" niet omdat hij er niet inzit :)
tmp verwijst alleen maar naar de Wizard, en zo kan je nog een aantal verwijzingen naar die Wizard aanmaken. Zie b.v. dit:

JavaScript:
1
2
3
4
5
6
var a = [1,2,3,4,5]; // array object
var b = a;           // a naar b

b[2] = 6;            // iets in b veranderen

alert(a);   // 1, 2, -6- , 4, 5   a is ook veranderd


Ik weet niet hoeveel Wizards je in 1 pagina gaat hebben, maar aangezien het een probleem is neem ik aan meer dan 1. Wat je evt kan doen is via de link in je pagina een "currentWizard" aanroepen. Die laat je in je code verwijzen naar de op dat moment actieve Wizard met een zelfgebouwd focusmeganisme oid.
Iets ala dit:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var currentWizard;

function Wizard() {
   // ...
   this.focus();
}

Wizard.prototype.focus = function() {
   currentWizard = this;
}

Wizard.prototype.something = function() {
   // ...
}

var a = new Wizard();
var b =new Wizard();

// html
<a href="..." onclick="currentWizard.something()"> ...


En dan moet je even kijken welke acties welke Wizard focussen.

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


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

@Clay: Hoe wil je zoiets in hemelsnaam toe gaan passen in bijvoorbeeld een setInterval of setTimeout (en dan met name als je in ieder object een 'thread' hebt lopen) :? Want met een onclick zoals in jouw voorbeeld is er geen enkel probleem (daar kun je gewoon a.something() of b.something() aanroepen...

Het probleem zit hem dan ook niet zozeer in de objecten zelf... er hoort in OO ook helemaal geen relatie te zijn tussen het object en de naam van een of andere instantie daarvan. Het probleem zit hem in de globaal uitgevoerde functies als bovengenoemde :P
Ik zoek een methode ofzo die een string returned met daarin de naam van de variabele die de nieuwe Wizard() bevat, in dit voorbeeld dus 'tmp'.
Dit gaat daarom dus ook NOOIT werken. Want van eenzelfde instantie kunnen tig referenties bestaan. Wat zou die terug moeten geven als je dit doet:

code:
1
tmp1 = tmp2 = tmp3 = new Wizard (...);


:?

[ Voor 26% gewijzigd door Bosmonster op 21-07-2003 09:45 ]


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

Clay

cookie erbij?

Ik zie even niet wat intervals ermee te maken hebben? Daarmee kan je trouwens ook binnen je scope dingen uitvoeren, alleen doen niet alle browsers daaraan:

JavaScript:
1
2
3
4
5
// in object scope
var self = this;
setInterval({function(){
   self.something();
}, 100);


over de onclicks, als je je OO bezig bent wil je natuurlijk niet afhankelijk zijn van die variabele namen. Ik zou dan ook geen a.something() of b.something() hard in een onclick in mn html willen hebben staan, dan ben je gedwongen die variabelen in je script te definiëren als instanties, en dat helpt imo het generieke van een OO aanpak om zeep, daarom dat currentWizard idee, dat is nog enigszins generiek te maken.

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


Verwijderd

JavaScript:
1
2
3
4
5
// in object scope
var self = this;
setInterval({function(){
   self.something();
}, 100);
offtopic:
Harstikke bedankt Clay; wat heb ik al veel van je geleerd _/-\o_

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

Clay

cookie erbij?

Voor zover ik weet werkt dat dus niet op de mac, of in IE lager dan 6. Moz en IE6 iig wel, en Opera weet ik niet. Zolang het er niet zo op aankomt kan je het dus op zich wel gebruiken, maar als er iets niet werkt is dat het eerste waar je kijken moet.

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


Verwijderd

In Opera 7 (oudere versies weet ik niet) werkt het ook. :)
Pagina: 1