molily: Unobtrusive Prototyping?

Beitrag lesen

Hallo,

Hier klappt's nicht mal mit dem prototype-Objekt, aber mit...

String.prototype.obj=function(){function F(){}F.prototype=this;return new F();};
// Allgemeiner: Object.prototype.newobj=function(){function F(){}F.prototype=this;return new F();};
var e = s.newobj();
alert( e.proto.length ); // Ausgabe: 11


> ...hat man auch endlich Zugriff auf die nicht iterable length-Eigenschaft :).  
  
Natürlich ist length immer iterable, aber nur bei String-Objects, weil bei String-Primitives gar nix iterable ist.  
  
Warum es hier funktioniert? Weil »this« in der Methode immer schon ein Object ist.  
  
String.prototype.m = function () { alert(typeof this); };  
s = "";  
alert(typeof s);  
s.m();  
alert(typeof s);  
  
s kann ich nie als Prototyp nehmen, solange es ein Primitive ist, aber es findet bei primitiveValue.methode() eine interne Umwandlung in Object statt, um die Methode in der Prototype-Chain zu finden. Die Umwandlung ist aber nur »virtuell« und gilt nur für den Kontext des Methodenaufrufs.  
  
Mathias