che si desidera aggiungere alla "plugin" con una portata/separazione privato di preoccupazione. Questo può essere importante per la manutenzione e l'estensibilità a lungo termine della tua applicazione web basata su plugin, indipendentemente dal fatto che tutto sarà incorporato in un unico file o più file.
È possibile creare un ambito privato ed estendere un metodo jQuery.fn esistente collegando direttamente i metodi o aggiungendo al prototipo del metodo di jQuery.fn.foo
(function ($) {
// instance method attached to the constructor function
$.fn.myCMS.classOne = function() {
};
// or "shared" method attached to prototype
$.fn.myCMS.prototype.classOne = function() {
};
})(jQuery);
È possibile utilizzare jQuery.extend(), che in questo caso è davvero una "scorciatoia" per aggiungere un metodo all'istanza del costruttore come primo metodo sopra. È necessario incapsulare tutto ciò si aggiunge in un oggetto (in genere questo sarebbe un oggetto anonimo):
$.extend($.fn.myCMS,{ classOne: function() { } });
Dal punto di vista di design, se si dispone di "classi" che hanno bisogno di ottenere le stesse variabili closured frequenza con cui dovrebbe probabilmente far parte della stessa funzione scope/closure, oppure dovresti esporre getter e setter per quelle variabili chiuse (magari con la convenzione _foo che mostra che sono destinate ad essere usate solo dal tuo codice).
(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);
Se vuoi essere un hacker ed è necessario per arrivare a variabili closured da un ambito diverso, io credo che si possa fare così mediante l'esecuzione di questi nuovi metodi con il proprio ambito utilizzando .Call() o .Applicare() dall'altra portata. Posso provare a captare alcuni esempi di come funziona, ma sarà una buona idea se fai le tue ricerche su come funziona la risoluzione della portata in questo tipo di scenari.
Credo che si possa "prendere in prestito" l'ambito dal metodo "plug-in" originale usando una costruzione con ($ .fn.myCMS) {} ma non sono al 100% positivo perché non l'ho fatto me stesso, solo letto su di esso.
fonte
2009-12-12 14:16:30