Hallo Mathias,
Gerade bei dem Script soll es möglich sein, z.B. Benutzereinstellungen wie Schriftgröße und Alternativstylesheet zu speichern. Die will ich so schnell wie möglich auslesen und setzen, nicht erst window.onload abwarten.
Dann würde ich wie Dirk meine Skrupel über Bord werfen, JSON.js direkt eingebettet mitliefern, einfach unter dem Aspekt, dass die zusätzlich übermittelten paar Bytes zeitlich sehr viel weniger wiegen als das danach abfolgende neue Anfordern einer neuen Ressource.
Du meinst, man sollte ssw.init() aufrufen müssen, anstatt dass es sich automatisch initialisiert
Nein gar nicht, mir ging's viel mehr im die Lese-Struktur des Programmtextes. Ich hätte instinktiv mit so einer (sehr vereinfachten) Grundstruktur angefangen:
~~~javascript (function () {
/* JSON und sonstige Helferlein */
function publicInterface (implementation) {
this.implementation = implementation;
}
publicInterface.prototype = {
get : function () {
return unserialized(this.implementation.get());
},
set : function (value) {
return this.implementation.set(serialized(value));
},
/* ... */
};
var backends = [
{ name : "storage",
isPossible : function () { /* ... / },
get : function () { / ... / },
set : function (serializedString) { / ... / },
/ ... /
},
{ name : "window.name",
isPossible : function () { / ... / },
/ ... /
},
/ ... */
];
var choosenBackend = backends.filter(function (backend) { return backend.isPossible(); })[0];
window["ssw"] = new publicInterface(choosenBackend);
delete backends;
})()
... einfach weil der Ablauf (Definieren -> Entscheiden -> Verknüpfen, -> Installieren) sehr viel linearer ist und der Unterschied zwischen öffentlichem Objekt und Backend genauer rauskommt. Vielleicht ist das auch nur ein Bauchgefühl; ich argumentiere hier ja auch mehr aus der Warte des den Code Lesendens.
> und die Implementierung mit forceImplementation gesetzt/geändert werden kann?
force() hatte ich tatsächlich übersehen. ;)
Ja, dann ist es schon sinnvoller eine besser objekt-orientierte Verwaltung der Backends zu haben anstatt in der Initialisierung alles in Stein zu meißeln. Ich würde dann in meinem obigen Krempel wieder im Konstruktur des öffentlichen Objektes das Housekeeping und die Entscheidungslogik ansiedeln – und wäre dann wieder bei etwas, was Deiner Variante ähnelt.
Tim