[JS]Naam object weten via Object.prototype

Pagina: 1
Acties:

  • coubertin119
  • Registratie: Augustus 2002
  • Laatst online: 15-05 15:12
Javascript heeft geen ingebouwde functie om een object/array weer te geven. Daarom ging ik lekker zelf wat schrijven. Na enig zoekwerk, komt [rml][ JS] Print_r()-achtige functie[/rml] uit de doos gevallen. Erg leuk topic enzo, en een leuke tip van Blues over toString.

Maar, ik wil ook echte objecten kunnen print_r()'en. En omdat Javascript de mogelijkheid biedt tot het gebruik van objecten en prototyping, wil ik deze functie op de (voor mij) meest logische plaats gooien, als een methode van àlle objecten.
JavaScript:
1
2
3
4
5
6
7
8
9
    Object.prototype.toString = function()
        {
            var returnValue = "";
            for (var i in this)
                {
                    returnValue += "naam van het object" + "." + i + " = " + this[i] + "\n";
                }
            return returnValue;
        }

En prototyping op Object werkt perfect, daar niet van. Maar ik zoek, om het simpel te zeggen, een mogelijkheid om de naam van het object weer te geven. Als het even kan de naam van het object én die van de instance :). En niet via work-arounds, door de naam al aan het object mee te geven enzo.

[ Voor 5% gewijzigd door coubertin119 op 29-06-2004 14:06 ]

Skat! Skat! Skat!


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

Errr volgens mij zal de naam van het object dan echt een property van het object moeten zijn... Er is volgens mij niet zomaar een functie die die jouw eigen varnaam zoekt bij dat object...


* SchizoDuckie paast dit topic ff door naar de guru's...


edit:
/me denkt inene Venkman® ('s debugger) kijk daar ook eens in :)

[ Voor 18% gewijzigd door SchizoDuckie op 29-06-2004 14:13 ]

Stop uploading passwords to Github!


Verwijderd

Wat bedoel je met de 'naam' van het object? De constructor? De naam van de instance kun je sowieso vergeten.

code:
1
2
3
Object.prototype.toString = funtion() {
    return this.constructor;
}


De .constructor geeft de hele constructor functie terug (die je weer als string kan parsen) waardoor je de functienaam eruit kan pulken.

[ Voor 28% gewijzigd door Verwijderd op 29-06-2004 14:15 ]


  • coubertin119
  • Registratie: Augustus 2002
  • Laatst online: 15-05 15:12
De constructor te pakken krijgen is al geweldig, spijtig dan dat de instance niet gaat lukken.

Blues, je bent een held! :*

Skat! Skat! Skat!


Verwijderd

je instance zie ik ook nog wel zitten, maar dan moet je je objecten anders gaan declareren

ideetje:

JavaScript:
1
2
3
4
5
Object.prototype.construct = function(name) {
  Window[name] = new this();
  this.name = name;
  return this;
}


zoiets?

verdere brainwave:
JavaScript:
1
2
3
4
5
function getInstanceName(obj) {
  for (var i in window) {
     if (window[i]==obj) return i
  }
}

[ Voor 23% gewijzigd door Verwijderd op 29-06-2004 14:33 ]


Verwijderd

Verwijderd schreef op 29 juni 2004 @ 14:30:

verdere brainwave:
JavaScript:
1
2
3
4
5
function getInstanceName(obj) {
  for (var i in window) {
     if (window[i]==obj) return i
  }
}
Je zou natuurlijk wel alle instances van je object willen hebben.
JavaScript:
1
2
3
4
5
6
7
function getInstanceNames(obj) {
  var aReturn = new Array();
  for (var i in window) {
     if (window[i]==obj) aReturn.push(i);
  }
  return aReturn;
}

Bovendien krijg je alleen top-level instances terug. myInstance.someProperty zal dus nooit gevonden worden, volgens mij...

Verwijderd

nee, maar die haal je dus uit je myInstance object, zover waren we al :D

en ik heb nog niks getest, maar ik heb zo het vermoeden dat je zo niet alle instances krijgt

alle instances zijn namelijk uniek en er zal er dus maar 1 gelijk zijn aan je obj

dan zou je moeten checken op window[i].constructor==obj.constructor

(vermoed ik)

edit: of bedoel je het anders:
JavaScript:
1
2
3
4
5
6
function blaat() {  //het object
}

var a = new blaat();
var b = a;  //a en b krijg je terug met blues z'n functie, bij mijn eerste functie alleen a
var c = new blaat(); // a b en c krijg je terug met wat ik hierboven zeg (vermoed ik, niks getest)

[ Voor 98% gewijzigd door Verwijderd op 29-06-2004 17:49 ]

Pagina: 1