Depois de ficar confuso por um tempo, finalmente recebi uma pista. É aproximadamente:
A cópia do código é a seguinte:
Crie uma função anônima auto-calculada, projete a janela do parâmetro e passe-a no objeto da janela.
O objetivo deste processo é,
A cópia do código é a seguinte:
Faça seu próprio código não contaminado por outros códigos e, ao mesmo tempo, ele não pode contaminar outros códigos.
Encapsulamento de jQuery
Então eu encontrei uma versão anterior do jQuery, e o código de encapsulamento no número da versão é 1.7.1 é aproximadamente o seguinte
A cópia do código é a seguinte:
(função (janela, indefinida) {
var jQuery = (function () {console.log ('hello');});
window.jQuery = Window. $ = jQuery;
if (typeof define === "function" && define.amd && define.amd.jquery) {
define ("jQuery", [], function () {return jQuery;});
}
})( janela );
Entre eles
A cópia do código é a seguinte:
console.log ('hello');
É usado para verificar se funciona como mencionado no início, para que possamos ligar para o jQuery na janela
A cópia do código é a seguinte:
janela. $
Ou
A cópia do código é a seguinte:
Window.JQuery
Para que possamos criar um pacote semelhante
A cópia do código é a seguinte:
(função (janela, indefinida) {
var ph = function () {
}
})(janela)
Comparado ao acima, faltam apenas duas etapas
1. Defina os símbolos e chamadas globais do jQuery
2. Suporte assíncrono
Então, encontrei o encapsulamento jQuery anterior, que era aproximadamente o mesmo em termos de método, exceto. .
A cópia do código é a seguinte:
if (typeof window.jQuery == "indefinido") {
var jQuery = function () {};
if (typeof $! = "indefinido")
jQuery ._ $ = $;
var $ = jQuery;
};
É tão mágico que não podemos reescrever o JQuery da etapa anterior. Então, eu tive que ver como é o mais recente encapsulamento do jQuery. Então, abri 2.1.1 e descobri que, exceto por adicionar muitas funções, minhas idéias são basicamente inalteradas.
A cópia do código é a seguinte:
(função (global, fábrica) {
if (typeof módulo === "objeto" && typeof module.exports === "Object") {
module.exports = global.document?
Fábrica (Global, True):
função (w) {
if (! W.Document) {
lançar um novo erro ("JQuery requer uma janela com um documento");
}
retornar a fábrica (W);
};
} outro {
fábrica (global);
}
} (tipoof janela! == "indefinido"? Janela: isto, função (janela, Noglobal) {
var jQuery = function () {
console.log ('jQuery');
};
if (typeof define === "function" && define.amd) {
define ("jQuery", [], function () {
retornar jQuery;
});
};
strundefined = typeof indefinido;
if (typeof Noglobal === Strundefined) {
window.jQuery = Window. $ = jQuery;
};
retornar jQuery;
}));
Ao usar um navegador
A cópia do código é a seguinte:
typeof module = "indefinido"
Portanto, a situação acima é julgada ao usar o Node.js, etc., que também indica que o jQuery está ficando inchado.
Pacote de backbone
Abra a espinha dorsal e confira
A cópia do código é a seguinte:
(função (root, fábrica) {
if (typeof define === 'function' && define.amd) {
Definir (['sublinhado', 'jQuery', 'Exports'], função (_, $, exportações) {
root.backbone = fábrica (root, exportações, _, $);
});
} else if (typeof exports! == 'indefinido') {
var _ = requer ('sublinhado');
fábrica (root, exportações, _);
} outro {
root.backbone = fábrica (root, {}, root._, (root.jQuery || root.zepto || root.ender || root. $));
}
} (esta, função (root, backbone, _, $) {
Backbone. $ = $;
retornar backbone;
}));
Além do suporte assíncrono, também reflete sua dependência de jQuery e sublinhado.
A cópia do código é a seguinte:
Definir (['sublinhado', 'jQuery', 'Exports'], função (_, $, exportações) {
root.backbone = fábrica (root, exportações, _, $);
});
Indica que a espinha dorsal é suportada nativamente pelo requerjs.
Pacote sublinhado
Então, olhei para sublinhado novamente e descobri que essa biblioteca ocupava outro símbolo_
A cópia do código é a seguinte:
(function () {
var root = this;
var _ = function (obj) {
if (obj instanceof _) retorna obj;
if (! (esta instância de _)) retorna novo _ (obj);
this._wrapd = obj;
};
if (typeof exports! == 'indefinido') {
if (typeof módulo! == 'indefinido' && module.exports) {
exports = module.exports = _;
}
exports._ = _;
} outro {
root._ = _;
}
if (typeof define === 'function' && define.amd) {
define ('sublinhado', [], function () {
retornar _;
});
}
} .call (this));
No geral, são funções quase anônimas, exceto que o método Call () é usado no final.