Ansfeld: seltsamer Methodenaufruf

Hallo zusammen.

Ich bin im Zusammenhang mit Microsofts Dictionary Object auf einen interessanten Methodenaufruf gestoßen:
var dict = new ActiveXObject("Scripting.Dictionary");
dict.add ("a", "test"); //Schlüssel, Wert
alert(dict.Item("a")); //Wert zu Schlüssel ausgeben
Soweit nichts neues, aber jetzt:
alert(dict("a")); //gleiche Funktion wie Item()

Huch - Methodenaufruf ohne expliziten Namen?
Wie nennt man denn das in der objektorientierten Welt?

Kann man sowas auch in Javascript realisierten - z.B. in der Klasse mydict?

function mydict(){
 this.Item = function(key){machwas}
}

Gespannt auf Antworten wartend,
Ansfeld

  1. Soweit nichts neues, aber jetzt:
    alert(dict("a")); //gleiche Funktion wie Item()

    Huch - Methodenaufruf ohne expliziten Namen?
    Wie nennt man denn das in der objektorientierten Welt?

    keine Anhnung

    Kann man sowas auch in Javascript realisierten - z.B. in der Klasse mydict?

    function mydict(){
    this.Item = function(key){machwas}
    }

    nein. da die Funktion mydict() ein Konstruktor ist, den du mit new mydict() aufrufst und dann ein Objekt erhälst.

    var obj = new mydict();

    Dann geht aber obj() nicht, da obj keine Funktion ist.

    du kannst aber mydict eine Funktion zurückgeben lassen, der du dann die entsprechenden Funktion zuweist.

    z.b. so:

    function myclass ()  
    {  
     var self = function(x)  
     {  
         alert(x);  
     }  
     var o = {};  
     self.param = function(k, v)  
     {  
         if(typeof k == 'undefined') return o;  
         if(typeof v == 'undefined') return o[k];  
         o[k] = v;  
         return o[k];  
     }  
     return self;  
      
    }  
    var x = new myclass();  
    var y = new myclass();  
      
    x.param('a', 'Der wert von a in x')  
    y.param('a', 'Der wert von a in y')  
      
    alert( x.param('a')  
    + '\n' +  
    y.param('a') ) ;  
    
    

    Das geht u.U. auch sauberer.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
  2. Hi,

    Huch - Methodenaufruf ohne expliziten Namen?
    Wie nennt man denn das in der objektorientierten Welt?

    "doof" ;-)

    Kann man sowas auch in Javascript realisierten - z.B. in der Klasse mydict?

    Wenn Du mydict von Function erben lässt, sollte das gehen (ungetestet). Werte einfach einen eventuell übergebenen Parameter aus.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  3. Tach.

    alert(dict("a")); //gleiche Funktion wie Item()

    Huch - Methodenaufruf ohne expliziten Namen?
    Wie nennt man denn das in der objektorientierten Welt?

    Am ehesten paßt darauf wohl "operator overloading". Das kenne ich z. B. von Delphis TList, auf deren Elemente du mit List.Items[i] oder -- ähnlich wie in deinem Beispiel -- mit List[i] zugreifen kannst.

    --
    Once is a mistake, twice is jazz.