[javascript]refereren naar een object

Pagina: 1
Acties:

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
Momenteel heb ik een object, die een functie aanroept die gedefinieerd is in een aparte bibliotheek. Nu is allemaal geen probleem, ook de vervolgactie, die door het object weer zelf uitgevoerd moet worden, wordt correct aangeroepen. Binnen die vervolgactie (dat een methode van het genoemde object is), lijkt het refereren naar andere methoden en de eigenschappen van het product opeens niet meer te lukken.

Zoiets werkt dus opeens niet meer:
Java:
1
2
3
4
5
object.prototype.methode = function( data ){
  try{
    this.methode2();
  } catch( e ){ alert( e ); };
};

Ik krijg dan de error dat this.methode2() niet gedefinieerd is, terwijl deze wel degelijk bestaat. Ook stukjes code uit andere methoden die ik kopieer naar deze functie, werken plots niet meer, altijd dezelfde fout, nl. dat de betreffende eigenschap/methode niet gedefinieerd is.
Als ik een alert( this) doe, geeft hij wel aan dat this verwijst naar een object( object Object).

Weet iemand hoe dit op te lossen is?

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


Verwijderd

Van wat voor soort object ga je verwijzen? Als je een this.method uitvoerd vanaf een element zal this niet na je instantiatie verwijzen maar naar je element en dan zul je dus moeten scopen.

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
Verwijderd schreef op vrijdag 23 december 2005 @ 14:33:
Van wat voor soort object ga je verwijzen? Als je een this.method uitvoerd vanaf een element zal this niet na je instantiatie verwijzen maar naar je element en dan zul je dus moeten scopen.
Nee, daar heeft het niet mee te maken. De this.method wordt uitgevoerd vanuit een andere methode van het betreffende object. Een alert( this ) geeft dan ook keurig aan dat this verwijst naar een object, maar als ik de eigenschappen/methoden probeer aan te roepen, mekkert ie dat deze niet gedefinieerd zijn :/

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • André
  • Registratie: Maart 2002
  • Laatst online: 15-04 09:54

André

Analytics dude

Als ik het zo probeer krijg ik geen probleem:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function object()
{
  this.id = "Test";
}  

object.prototype.methode = function( data )
{
  try {
    this.methode2();
  } catch( e ){ alert( e ); };
};

object.prototype.methode2 = function( data )
{
  this.id = "Andre"
}

andre = new object();
andre.methode();

alert(andre.id)

Verwijderd

Wat geeft de constructor van het object terug? :)

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
André schreef op vrijdag 23 december 2005 @ 14:47:
Als ik het zo probeer krijg ik geen probleem:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function object()
{
  this.id = "Test";
}  

object.prototype.methode = function( data )
{
  try {
    this.methode2();
  } catch( e ){ alert( e ); };
};

object.prototype.methode2 = function( data )
{
  this.id = "Andre"
}

andre = new object();
andre.methode();

alert(andre.id)
Het is bij mij ook het eerste probleem dat ik hiermee heb. Ik kan wel even wat details geven, misschien dat er dan bij iemand een lichtje gaat branden.

Het gaat om een javascript-gebaseerde file-browser die zijn gegevens ophaalt middels een ajax-call. Ik heb een aparte ajax-bibliotheek in dit project en die werkt goed. Omdat ik in eerste instantie (om het devven te versnellen) de data middels een losse functie bij het initialiseren van de browser liet inladen net zoals ik al mijn andere ajax-calls ook doe, gaf het nergens problemen en werkte als een tierelier.

Omdat ik nu een aantal functies heb ingebouwd zoals hernoemen van bestanden, verwijderen en verplaatsen enzo, ben ik aan het testen om vanuit de browser zelf die ajax-bibliotheek aan te roepen en het resultaat te verwerken (tot op dit moment paste ik gewoon middels wat DOM-scripting de elementen binnen de browser aan, dus een file hernoemen was 1) een call naar een server-side script om de bestandsnaam aan te passen en 2) de naam van het bestand in de file-collectie aanpassen, alle huidige bestanden uit de DOM verwijderen en vervolgens de gegevens zoals die in de file-collectie bekend waren opnieuw in de DOM neerzetten.
Ik moest maar hopen dat alles goed was gegaan. Omdat het script wel een xml-statusrapport gaf, wilde ik dat kunnen inlezen, maar daarbij gaat het op dezelfde manier fout als ik hieronder beschrijf. )

Omdat ook het opvragen van content in een dieper gelegen map nog via de eerder genoemde externe functie ging, wilde ik daar gewoon een methode van maken, ala browser.refresh(); Aan de functie in de ajax-bibliotheek moet ik doorgeven aan welke functie de response gevoerd moet worden, dus heb ik in refresh opgegeven: var self = this; en als return-functie aan de ajax-call: self.loadData, waarbij loadData gedefinieerd is als
Java:
1
browser.prototype.loadData = function( data ){ /*blah blah*/}; 

Dit heeft overal gewerkt, en zo ook hier. Alleen als ik binnen die loadData nu een eigenschap of hethode van de browser opvraag, wil hij die niet geven. Vraag ik bijvoorbeeld op this.files.length, dan zegt ie: this.filecollection is geen object, terwijl dat zeker te weten wel het geval is. Ook een simple eigenchap als this.copyright, dat normaal gesproken een copyright-boodschap returned, is nu niet gedefinieerd.

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
Verwijderd schreef op vrijdag 23 december 2005 @ 15:01:
Wat geeft de constructor van het object terug? :)
ff koffie gedronken en nu ff constructor gechecked. En wie schets mijn verbazing?
Ik zie dat this nu opeens verwijs naar mijn xmlhttp object :X
Hoe kan dat nu weer?

dit is de functie die het probleem geeft:
Java:
1
2
3
4
5
browser.prototype._processAddDirectory = function( data ){
    alert( this.constructor ); // geeft onverwacht niet de constructor van browser, maar van de xmlhttp-functionaliteit
    alert( data ); // geeft de verwachte response terug
    alert( this.copyright ); // gaat fout, undefined, want zit niet in mn ajax-lib
};


het wordt aangeroepen door deze functie:
Java:
1
2
3
4
5
6
7
8
browser.prototype.addDirectory = function( e ){
        var self = this;

        //hier wordt wat code uitgevoerd, oa om de naam van de nieuwe directory op te vragen
        
        var postData = "action=addfolder&parent=" + escape( location ) + "&name="+ escape( name );
        doPOSTRequest( getBase() + "cgi-bin/imagemanagement_manage.asp", postData, self._processAddDirectory );
};

[ Voor 126% gewijzigd door wizzkizz op 23-12-2005 15:33 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • André
  • Registratie: Maart 2002
  • Laatst online: 15-04 09:54

André

Analytics dude

wizzkizz schreef op vrijdag 23 december 2005 @ 15:12:
[...]

ff koffie gedronken en nu ff constructor gechecked. En wie schets mijn verbazing?
Ik zie dat this nu opeens verwijs naar mijn xmlhttp object :X
Hoe kan dat nu weer?
Omdat je misschien niet de returnwaarde aan je object toekent maar een referentie naar je xmlhttp object maakt?

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
André schreef op vrijdag 23 december 2005 @ 15:30:
[...]

Omdat je misschien niet de returnwaarde aan je object toekent maar een referentie naar je xmlhttp object maakt?
Ik maak helemaal niet bewust (onbewust mss wel :X) een referentie naar dat xmlhttp object. Dat xmlhttp object geeft de responseText terug naar de functie die daarom vroeg op deze manier:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function doPOSTRequest( url, data, handler ){
    var ajax = new CallBackObject();
        ajax.handleResponse = handler;
        ajax.doCallBack( 'POST', url, data );
}

CallBackObject.prototype.OnComplete = function(responseText, responseXml)
{
  this.responseText = responseText;
  this.responseXML = responseXml;
  this.status = 4;
  
  var returnValue = ( this.doReturn == 'xml' ) ? responseXml : responseText;

  if( this.debug ) alert( 'loading completed...' );
  if( this.debug ) alert( returnValue );

  try
  {
    this.handleResponse( returnValue );
  } catch( e ) { };
};

[ Voor 6% gewijzigd door wizzkizz op 23-12-2005 15:46 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
niemand die weet hoe ik dit op moet lossen?
Ik vermoed dat het zit in
Java:
1
this.handleResponse( returnValue );

Maar ik zou niet weten hoe ik dat anders op moet lossen. Ik heb al wat gespeeld met wat variaties maar ik kom er niet uit. Kan iemand helpen?

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 19-12-2025

wizzkizz

smile...tomorrow will be worse

Topicstarter
eigenlijk was de oplossing best simpel 8)7
ik had ipv self.methode als functie die de response moest verwerken moeten opgeven
Java:
1
function( data ){ self.methode( data ) }

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.

Pagina: 1