2012-10-03 14 views
5

Wiem, że to jest niezadowolone, po prostu zgłębiałem ten pomysł i moje życie nie może sprawić, że ta praca będzie taka, jak bym tego chciał.Po prostu ciekawy jak podklasować obiekt String. (prototypowo)

Przykład powinien wyjaśnić wszystko:

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

var theString = 'Kung'; 

alert(theString.MyNS.fooify()); 

Oczywiście to po prostu dołączyć definicję funkcji do „foo” ... Dodanie tego() zamiast pracy nie robi.

Rozumiem, że straciłem tam kontekst, ale nie mogę wymyślić, jak spowodować, by oryginał wystrzelił i dał mi to, czego chcę.

+0

związane: http://stackoverflow.com/questions/7141734/extending-core-types-without-modifying-prototype? – valentinas

Odpowiedz

7

Oto jeden ze sposobów można to zrobić:

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

zobaczyć to in action on jsFiddle

uwaga, jak wskazuje slashingweapon, że trzeba będzie nazwać tak:

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

O ile mi wiadomo, nie ma na to sposobu w przeglądarce, bez konieczności wywoływania funkcji MyNS.

+1

Ale musisz nazywać to jak "cokolwiek" .MyNS(). Fooify(); ' – slashingweapon

+0

Uwielbiam to! Szkoda, że ​​nie musiałem tak nazywać, ale przynajmniej działa ... dzięki! –

+0

Co jest poprawne: 'String.prototype.MyNS(). Fooify()' OR 'String.MyNS(). Fooify()'? Odpowiedź dotyczy komentarza @slashingweapon, ale odnosi się do innej składni. – jahroy

1

możliwość dodawania nowych function (class w kategoriach oo) do Stringprototype i nie ma dostępu do rzeczywistej przykład String.

może po prostu dodać właściwość bezpośrednio na prototypie:

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