Zwei Objekte vergleichen?

- javascript
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
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
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...
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
:
~~~javascript
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`{:.language-javascript} 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())`{:.language-javascript} ... 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](http://javascript.crockford.com/)
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]