Object im Prototyp: Zugriff auf die aufrufende Instanz
LX
- javascript
Guten Morgen, liebe Freunde des täglichen JS-Wahnsinns!
Man stelle sich folgendes Konstrukt vor:
String.prototyp.foo = {
bar: function() { return this; }
}
"test".foo.bar() // => [Object foo]
Gibt es eine Möglichkeit, aus dem Objekt heraus, bei welchem this das übergelagerte Objekt referenziert, wieder auf die aufrufende Instanz, in diesem Fall den String "test" zu kommen?
Gruß, LX
Gibt es eine Möglichkeit, aus dem Objekt heraus, bei welchem this das übergelagerte Objekt referenziert, wieder auf die aufrufende Instanz, in diesem Fall den String "test" zu kommen?
Kurze Antwort: Nein.
Lange Antwort: Jedenfalls nicht so einfach.
Du könntest eine Funktion daraus machen:
String.prototype.foo = function () {
var string = this,
func = function () {
alert(this);
},
boundFunc = function () {
func.apply(string);
};
return {
bar : boundFunc
};
};
"test".foo().bar()
Alternativ kannst du eine einzelne String-Instanz zu erweitern:
function MyString (string) {
string = Object(string);
string.foo = {
bar : function () {
alert(string);
}
};
return string;
};
var str = MyString("test");
str.foo.bar();
Problem: String-Primitive wird in ein Object umgewandelt. Bei der nächsten Gelegenheit (z.B. durch Operatoren wie +=) wird es wieder in einen Primitive zurückgewandelt und verliert die Erweiterung.
Such mal im Forumsarchiv, da wurden solche Erweiterungen für Strings und Numbers schon öfters diskutiert.
Mathias
Such mal im Forumsarchiv, da wurden solche Erweiterungen für Strings und Numbers schon öfters diskutiert.
</archiv/2009/1/t182429/#m1207312> samt Links
Mathias