Hallo Siechfred,
Es gibt bereits eine Klasse hash
Der Hash von Prototype tut auch nichts anderes als ein JS-Objekt als Hash zu nutzen, eben weil die interne JS-Implementierung (abseits des in der Aufruforder danach kommenden Prototype-Systems) mit Hashtabellen arbeitet. Prototype nutzt in seiner Implementierung nicht mal die Überprüfung von woher des jeweilige Objekt-Property kommt; aber damit muss man wohl in einem Framework leben, das das Originalsystem mit einer eigenen API so umbastelt, dass angenommen wird, das Originalsystem werde nicht mehr benutzt.
Ich würde es z.B. so oder so ähnlich basteln, würde ich auf der sicheren Seite sein wollen:
~~~javascript
function Hash () {
var store = {};
this.set = function (key, value) {
store[key] = value;
}
this.get = function (key) {
if (store.hasOwnProperty(key)) {
return store[key];
} else {
return undefined;
}
}
this.del = function (key) {
delete store[key];
}
this.each = function (func) {
...
}
}
(Man verliert natürlich das Zugreifen auf den durch Closure geschützten store bei zusätzlichen Prototype-Methoden, aber ich wollte ja nur das Grundprinzip demonstrieren.)
Letztendlich haben beide Parteien hier im Thread recht. JS-Objekte sind im Sinne von „Watschelt wie eine Ente, quakt wie eine Ente“ Hashes; haben aber noch zusätzliche Semantik durch die prototypische Vererbung; sind praktisch eine Obermenge von Hashes. Wie man das nun genau interpretiert ist nun mal Interpretationssache und ist eine Frage des Standpunktes und der jeweiligen Bedürfnisse.
Tim