Wenn Sie nur etwas wie PHP-Funktionen möchten, lesen Sie die folgende Lösung, die ich kam. Ich gehe davon aus, dass Sie diese Funktionalität auf Ihre eigenen Objekte anwenden werden. Nun, solange sie keine Funktionen sind, können Sie die folgende Konvention für Bequemlichkeit haben, und es sollte auf allen Browsern funktionieren:
anstelle von myobj.foo oder myobj ['foo'], einfach myobj (' foo '), und machen Sie Ihr Objekt aufrufbar, wenn Sie es definieren. Aber Sie müssen die Verwendung von "neu" vermeiden, da "neu" niemals eine Funktion in Javascript zurückgeben kann.
var NewFlexible = function() {
var custom = {};
return function(prop) {
if (!(prop in custom)) custom.prop = null;
return custom.prop;
};
};
Und dann können Sie Objekte erstellen, etwa so:
myObj = NewFlexible();
etwas Mit ähnlich dem Douglas Crockford Muster, könnten Sie "Klassen" erstellen, die diese erweitern:
var NewDerived = function(options) {
var result = {};
NewFlexible.apply(result, arguments); // parent constructor
// go on to do what you have to do
return result;
};
Or Um Konstruktoren zu vergessen, können Sie einfach einen Wrapper um Objekte erstellen:
var MakeFlexible = function (obj) {
return function(prop) {
if ('prop' in obj) return obj.prop;
obj.prop = null; return obj.prop;
};
}
Sie müssen diese Dokumentation nur für alle Benutzer Ihres Codes veröffentlichen. Es ist wirklich gut, Ihre Funktionalität durch diese Konvention offen zu legen, weil Sie nicht Leute durch die Verwendung von Nicht-Standard-Javascript verarschen wollen.
Dies ist kein Standard ... – jldupont
nicht einmal auf V8: http://code.google.com/p/v8/issues/detail?id=264 – jldupont
OP nie erwähnt, dass als Voraussetzung; Soweit ich weiß, könnte er Rhino benutzen. nur gesagt, dies ist eine Möglichkeit, es zu tun. –