2012-06-27 11 views
7

Aktualnie używam JavaScript (CommonJS) w Titanium Studio i mam pytanie dotyczące prototypowania. Załóżmy, że chcę dodać nową funkcję do istniejącej klasy. Na przykład:Gdzie dodać prototyp String

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

Jakie jest najbardziej odpowiednie miejsce, w którym powinienem dodać ten kod, aby od razu stał się dostępny dla wszystkich klas?

Z góry dziękuję.

Odpowiedz

8

Ok, znalazłem najlepszą odpowiedź (autor: Ivan Škugor) i chcę go tutaj udostępnić, aby dowiedzieć się, kto ma takie samo pytanie. Dzięki za pomoc.

"Rozszerzenie ogólnie dostępnych prototypów nie jest dobrym pomysłem.W tym konkretnym przypadku nie powinno to stanowić problemu w niektórych innych środowiskach, ale używanie CommonJs jest problemem, ponieważ każdy moduł CommonJs jest nowym JS Kontekst, czyli czyste środowisko JS, więc wszystko, co robisz ze środowiskiem (np. rozszerzanie natywnych prototypów) nie będzie odzwierciedlane w innych modułach Z tego powodu najlepiej napisać moduł "utils" z funkcjami pomocniczymi i " wymagaj "tam, gdzie jest to potrzebne".

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

- Ivan Skugor

4

Tylko upewnij się, że jest zdefiniowany, zanim spróbujesz go użyć i będziesz gotowy!

+0

Dzięki za odpowiedź Sean. Ale czy nie ma konwencji o tym, jak/gdzie powinienem to zrobić? – junior

+0

Jeśli masz bibliotekę, której używasz wszędzie, zawsze możesz ją tam umieścić. Zwykle definiuję funkcje, które dodają do wbudowanych klas w górnej części dowolnej biblioteki, którą włączam, aby zachować porządek i porządek. Tak samo, jak definiuję atrybuty CSS znaczników HTML u góry pliku CSS oraz klasy/identyfikatory po. –

5

Twój przykład jest dobry w użyciu, ponieważ większość przeglądarek mają własne metody wykończenia, więc najlepiej jest przetestować natywny przed dodaniem własnych:

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