Setelah mengelirukan enkapsulasi perpustakaan JS yang berbeza untuk seketika, akhirnya saya mendapat petunjuk. Secara kasar:
Jadi saya menjumpai versi awal jQuery Nombor versi ialah 1.7.1 Kod enkapsulasi secara kasarnya seperti berikut
yang mana
Jadi kita boleh buat pakej yang serupa
}
})(tetingkap)
1. Tentukan simbol jQuery dan panggilan global
2.Sokongan tak segerak
Jadi saya mencari pakej jQuery yang lebih awal, dan kaedahnya lebih kurang sama, kecuali. .
var $ = jQuery;
};
Ini adalah kaedah penghakiman yang ajaib sehingga kami tidak boleh menulis semula jQuery dalam langkah sebelumnya. Jadi saya terpaksa melihat rupa pakej jQuery terkini. Jadi saya membuka 2.1.1 dan mendapati bahawa selain menambah banyak fungsi, idea asasnya tetap sama
if (jenis modul === "objek" && jenis modul.eksport === "objek") {
module.exports = global.document ?
kilang(global, benar) :
fungsi(w) {
jika (!w.dokumen) {
throw new Error("jQuery memerlukan tetingkap dengan dokumen");
}
pulangkan kilang(w);
};
} lain {
kilang(global);
}
}(jenis tetingkap !== "tidak ditentukan" ? tetingkap : ini, fungsi(tetingkap, tiadaGlobal) {
var jQuery = function() {
console.log('jQuery');
};
if (typeof define === "function" && define.amd) {
define("jquery", [], function() {
kembalikan jQuery;
});
};
strudefined = jenis undefined;
if (jenis noGlobal === strudefined) {
window.jQuery = window.$ = jQuery;
};
kembalikan jQuery;
}));
Tulang Belakang 封装
打开了Backbone看了一下
define(['underscore', 'jquery', 'exports'], function(_, $, exports) {
root.Backbone = kilang(root, eksport, _, $);
});
var _ = memerlukan('garis bawah');
kilang(root, eksport, _);
root.Backbone = kilang(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));
}
Tulang belakang.$ = $;
kembalikan Tulang Belakang;
Skor bawah 封装
于是,又看了看Underscore,发现这个库又占领了一个符号 _
if (typeof exports !== 'undefiniert') {
If (typeof module !== 'undefiniert' && module.exports) {
exports = module.exports = _;
}
exporte._ = _;
} sonst {
root._ = _;
}
if (typeof define === 'function' && define.amd) {
define('underscore', [], function() {
return _;
});
}
}.call(this));