2012-06-27 6 views
7

Ich benutze derzeit JavaScript (CommonJS) in Titanium Studio und habe eine Frage zum Prototyping. Angenommen, ich möchte einer vorhandenen Klasse eine neue Funktion hinzufügen. Zum Beispiel:Wo String Prototyp

Was ist der geeignetste Ort, an dem ich diesen Code hinzufügen sollte, damit er sofort für alle Klassen verfügbar ist?

Vielen Dank im Voraus.

Antwort

8

Ok, fand ich die beste Antwort (von Ivan Škugor) und ich möchte es hier mit denen teilen, die dieselbe Frage haben. Danke für Ihre Hilfe.

"Die Erweiterung nativer Prototypen im Allgemeinen ist keine gute Idee. In diesem speziellen Fall sollte dies in einigen anderen Umgebungen kein großes Problem darstellen. Durch die Verwendung von CommonJs ist dies jedoch ein Problem, da jedes CommonJs-Modul ein neues JS ist Kontext, was bedeutet, saubere JS-Umgebung. Also, alles, was Sie mit der Umgebung tun (wie native Prototypen zu erweitern) wird nicht in anderen Modulen widergespiegelt. Deshalb ist das beste, um "utils" -Modul mit Hilfsfunktionen zu schreiben und " benötigen "es überall wo Sie es brauchen."

//utils.js 
exports.trim = function(str) { 
    return str.replace(/^\s+|\s+$/g,""); 
}; 

- Ivan Skugor

4

Stellen Sie sicher, dass es definiert ist, bevor der Code verwendet wird, und Sie werden eingestellt!

+0

Vielen Dank für Ihre Antwort Sean. Aber gibt es keine Konvention darüber, wie/wo soll ich das machen? – junior

+0

Wenn Sie eine Bibliothek haben, die Sie überall verwenden, können Sie sie immer dort einfügen. Ich definiere normalerweise Funktionen, die zu integrierten Klassen am Anfang der Bibliothek, die ich einschließe, hinzufüge, um die Dinge sauber und ordentlich zu halten. Ähnlich wie ich CSS-Attribute von HTML-Tags am Anfang der CSS-Datei und Klassen/IDs nach definieren. –

5

Ihr Beispiel gut ist, zu verwenden, da die meisten Browser ihre eigene Trimm-Methode haben, so ist es am besten für die native zu testen, bevor Sie Ihren eigenen hinzu:

String.prototype.trim= String.prototype.trim || function(){ 
    return this.replace(/^\s+/, '').replace(/\s+$/, ''); 
}