chcesz dodać do "wtyczki" z prywatnym zakres/separacji niepokoju. Może to być ważne w przypadku konserwacji i długoterminowej rozbudowy aplikacji internetowej opartej na wtyczce, niezależnie od tego, czy wszystko zostanie wbudowane w jeden plik czy wiele plików.
Można utworzyć prywatną zakres i rozszerzyć istniejącą metodę jQuery.fn przez bezpośrednie przymocowanie metod lub dodając do prototypu danej metody jQuery.fn.foo za
(function ($) {
// instance method attached to the constructor function
$.fn.myCMS.classOne = function() {
};
// or "shared" method attached to prototype
$.fn.myCMS.prototype.classOne = function() {
};
})(jQuery);
Można użyć jQuery.extend(), w tym przypadku jest to naprawdę "skrót" do dodawania metody do instancji konstruktora jako pierwszej metody powyżej. Trzeba hermetyzacji co dodajesz do obiektu (zwykle będzie to anonimowy Object):
$.extend($.fn.myCMS,{ classOne: function() { } });
Z punktu widzenia projektowania, jeśli masz „klas”, które muszą dotrzeć do tych samych zmiennych closured często oni powinien prawdopodobnie być częścią tego samego zakresu funkcji/zamknięcia, lub powinieneś narazić gettery i ustawiające dla tych zamkniętych zmiennych (być może z konwencją _foo, która pokazuje, że są one przeznaczone tylko dla twojego kodu).
(function ($) {
var foo = "foo!";
// combined getter/setter
// could also check arguments.length
$.fn.myCMS._foo = function (value) {
if (typeof(value) != "undefined") {
foo = value;
} else {
return foo;
}
};
)(jQuery);
Jeśli chcesz być hakerem i trzeba dostać się na zmiennych closured z innego zakresu, uważam, że można to zrobić poprzez wykonanie tych nowych metod z własnym zakresie korzystania .Połączenia() lub .apply() z innego zakresu. Mogę próbować pobudzić kilka przykładów tego, jak to działa, ale dobrze będzie, jeśli przeprowadzisz własne badania nad tym, jak rozdzielczość zakresu działa w tego rodzaju scenariuszach.
Wierzę, że można "pożyczyć" zakres od pierwotnej metody "wtyczki" za pomocą konstrukcji z ($ .fn.myCMS) {}, ale nie jestem w 100% pozytywna, ponieważ tego nie zrobiłem siebie, czytaj tylko o tym.