peterS.: [Object].equals, [Object].dump, [Object].clone

Beitrag lesen

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:]