LX: Object im Prototyp: Zugriff auf die aufrufende Instanz

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

--
RFC 1925, Satz 6: Es ist einfacher, ein Problem zu verschieben (...), als es zu lösen.
  1. 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

    1. Such mal im Forumsarchiv, da wurden solche Erweiterungen für Strings und Numbers schon öfters diskutiert.

      </archiv/2009/1/t182429/#m1207312> samt Links

      Mathias