Eddie: Zwei Objekte vergleichen?

Hallo allerseits,

geht es, zwei Objekte O1 und O2 mit Eigenschaften x,y,z zu vergleichen, ohne die Eigenschaften einzeln zu checken?
Es handelt sich dabei aber nicht um dieselben Objekte, was ich glaubich mit if (O1 == O2)... prüfen kann.

Geht das irgendwie?

Danke euch,
Eddie

--
Old men and far travelers may lie with authority.

  1. Hi,

    es würde sich wahrscheinlich anbieten das Modell von Java zu übernehmen. Verpasse dem Objekt eine .equals(otherObject)-Methode und vergleich darin die entsprechenden Eigenschaften, sofern vorhanden.

    MfG
    Rouven

    --
    -------------------
    Inter Arma Enim Silent Leges  --  Cicero

  2. n'abend,

    geht es, zwei Objekte O1 und O2 mit Eigenschaften x,y,z zu vergleichen, ohne die Eigenschaften einzeln zu checken?
    Es handelt sich dabei aber nicht um dieselben Objekte, was ich glaubich mit if (O1 == O2)... prüfen kann.

    das ist nicht möglich. Zumindest ergab der folgende Test-Code 2x "natürlich nicht":

    function Object1(){ var x = 0; } function Object2(){ var x = 0; var y = 1; } function Object3(){ var x = 0; } if( Object1 == Object2 )   alert('komisch, aber wahr'); else   alert('natürlich nicht'); if( Object1 == Object3 )   alert('komisch, aber wahr'); else   alert('natürlich nicht');

    Auch die Gleichheitsprüfung 2er Instanzen von Object1 ergab "natürlich nicht".

    weiterhin schönen abend...

    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|

    -- Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
  3.    gruss Eddie,

    geht es, zwei Objekte O1 und O2 mit Eigenschaften x,y,z zu vergleichen, ...
    Es handelt sich dabei aber nicht um dieselben Objekte, was ich glaubich mit
    if (O1 == O2)... prüfen kann.

       wie von Rouven vorgeschlagen, muss man sich ein eigenes [Object].equals
       stricken.

       dies ist aber alles andere als trivial.

       wer es schafft, fuer JavaScript ein wasserdichtes [Object].clone und ein
       verlaessliches [Object].equals zu schreiben, muss diese sprache fast schon
       verinnerlicht haben.

       nach vielen versuchen und umfangreichen tests bin ich der meinung, dass
       eine resourcenschonende (sowohl im quellcode-umfang als auch im laufzeit-
       verhalten) umsetzung nur im rahmen einer selbstauferlegten hinreichenden
       genauigkeit zu erreichen ist.

       der von mir zuletzt verfolgte ansatz arbeitet nicht mehr mit den anfangs
       favorisierten direkten rekursiven vergleichen zwischen den eigenschaften
       der zu analysierenden objekte - vielmehr werden jetzt die jeweiligen
       "dump-signaturen" beider objekte miteinander verglichen.

       entsprechend einfach gestaltet sich auch die implementierung der schon
       mehrfach angesprochenen methode [Object].equals:

       

    Object.prototype.equals = function (obj) {      return ((this === obj) || (this.dump() == obj.dump()));    };

       die aufgabe verschiebt sich nun dahingehend, ein vernuenftiges "dump"
       fuer die verschiedenen objekte das JavaScript-sprachkerns implementieren
       zu muessen. dazu moechte ich Dich einfach auf den letzten arbeitsstand
       meiner diesbezueglichen dauerbaustelle verweisen - dort gibt es genug
       quaelcode zum gucken:

       http://www.pseliger.de/jsExtendedApi/jsApi.Object.clone.new.dev.html
       http://www.pseliger.de/jsExtendedApi/jsApi.Object.clone.new.dev.js

       [Object].equals kommt auch wirklich mit jedem kram zurecht, weigert sich
       aber konsequent, ein objekt und dessen direkten klon fuer identisch zu
       erklaeren ... (obj.dump() == obj.clone().dump()) ... ist immer falsch.

       so long - peterS. - pseliger@gmx.net

    --
    »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
    Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford

    ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]