2012-10-03 5 views
5

Ich weiß, dass das verpönt ist, ich habe nur die Idee erforscht und für das Leben von mir kann nicht scheinen, dass dies funktioniert so, wie ich es auch wollen würde.Nur neugierig, wie das String-Objekt abgeleitet wird. (prototypisch)

Das Beispiel sollte alle erklären:

String.prototype.MyNS = function() {} 
String.prototype.MyNS.fooify = function() { 
    return this + 'foo!'; 
} 

var theString = 'Kung'; 

alert(theString.MyNS.fooify()); 

Natürlich ist dies einfach hängen Sie die Funktionsdefinition ‚foo‘ ... Hinzufügen dieser() statt nicht funktioniert.

Ich verstehe, dass ich den Kontext in dort verloren habe, aber kann nicht herausfinden, wie man das Original auslöst und mir gibt, was ich will.

+0

bezogen werden: http://stackoverflow.com/questions/7141734/extending-core-types-without-modifying-prototype? – valentinas

Antwort

7

Hier ist eine Möglichkeit, Sie könnte es tun:

String.prototype.MyNS = function() { 
    var _this = this; 
    return { 
     fooify: function() { 
      return _this + 'foo!'; 
     } 
    }; 
} 

anzeigen in action on jsFiddle

Hinweis, wie slashingweapon weist darauf hin, dass Sie es wie so nennen müssen:

String.prototype.MyNS().fooify(); 

Soweit ich weiß, gibt es keine browserübergreifende Möglichkeit, dies zu tun, ohne MyNS als Funktion aufrufen zu müssen.

+1

Aber Sie müssen es nennen wie '" was auch immer ".MyNS(). Fooify();' – slashingweapon

+0

Ich liebe es! Ich wünschte, ich hätte es nicht so nennen müssen, aber es funktioniert zumindest ... Danke! –

+0

Was ist richtig: 'String.prototype.MyNS(). Fooify()' ODER 'String.MyNS(). Fooify()'? Die Antwort bezieht sich auf den Kommentar von @slashingweapon, verweist dann aber auf eine andere Syntax. – jahroy

1

Sie einen neuen function (class in oo Bedingungen) an die Stringprototype und es hat keinen Zugriff auf die tatsächlichen String Instanz hinzufügen.

könnten Sie fügen Sie einfach die Eigenschaft direkt an den Prototyp:

String.prototype.fooify = function() { 
    return this + 'foo!'; 
} 
var theString = 'Kung'; 
alert(theString.fooify());