بعد الخلط بين الوقت ، حصلت أخيرًا على أدنى فكرة. هو تقريبا:
نسخة الكود كما يلي:
قم بإنشاء وظيفة مجهولة المصدر للذات ، وتصميم نافذة المعلمة ، وقم بتمريرها في كائن النافذة.
الغرض من هذه العملية هو ،
نسخة الكود كما يلي:
اصنع الكود الخاص بك غير ملوث برموز أخرى ، وفي الوقت نفسه ، لا يمكن أن يلوث الرموز الأخرى.
تغليف jQuery
لذلك وجدت إصدارًا سابقًا من jQuery ، ورمز التغليف في رقم الإصدار هو 1.7.1 هو ما يلي تقريبًا
نسخة الكود كما يلي:
(وظيفة (نافذة ، غير محددة) {
var jQuery = (function () {console.log ('hello') ؛}) ؛
window.jquery = نافذة. $ = jQuery ؛
if (typeof define === "function" && define.amd && define.amd.jquery) {
define ("jQuery" ، [] ، function () {return jQuery ؛}) ؛
}
}) (نافذة) ؛
فيما بينها
نسخة الكود كما يلي:
console.log ('hello') ؛
يتم استخدامه للتحقق مما إذا كان يعمل كما هو مذكور في البداية ، حتى نتمكن من الاتصال بـ jQuery في النافذة
نسخة الكود كما يلي:
نافذة. $
أو
نسخة الكود كما يلي:
window.jquery
حتى نتمكن من إنشاء حزمة مماثلة
نسخة الكود كما يلي:
(وظيفة (نافذة ، غير محددة) {
var ph = function () {
}
}) (نافذة)
بالمقارنة مع ما سبق ، لا يوجد سوى خطوتين مفقودات
1. تحديد الرموز والمكالمات العالمية لـ jQuery
2. الدعم غير المتزامن
لذلك وجدت تغليف jQuery السابق ، والذي كان كما هو الحال تقريبًا من حيث الطريقة ، باستثناء. .
نسخة الكود كما يلي:
if (typeof window.jquery == "undefined") {
var jQuery = function () {} ؛
إذا (typeof $! = "غير محدد")
jQuery ._ $ = $ ؛
var $ = jQuery ؛
} ؛
إنه أمر سحري لدرجة أننا لا نستطيع إعادة كتابة الخطوة السابقة. لذلك كان علي أن أرى ما يبدو عليه أحدث تغليف jQuery. لذلك فتحت 2.1.1 ووجدت أنه باستثناء إضافة الكثير من الوظائف ، فإن أفكاري لم تتغير بشكل أساسي.
نسخة الكود كما يلي:
(وظيفة (عالمية ، مصنع) {
if (typeof module === "object" && typeof module.exports === "Object") {
module.exports = global.document؟
المصنع (عالمي ، حقيقي):
وظيفة (W) {
if (! w.document) {
رمي خطأ جديد ("jQuery يتطلب نافذة مع مستند") ؛
}
Return Factory (W) ؛
} ؛
} آخر {
المصنع (عالمي) ؛
}
} (typeof window! == "غير محدد"؟ نافذة: هذا ، وظيفة (نافذة ، noglobal) {
var jQuery = function () {
console.log ('jQuery') ؛
} ؛
if (typeof define === "function" && define.amd) {
define ("jQuery" ، [] ، function () {
إرجاع jQuery.
}) ؛
} ؛
strundefined = typeof undefined ؛
if (typeof noglobal === strundefined) {
window.jquery = نافذة. $ = jQuery ؛
} ؛
إرجاع jQuery.
})) ؛
عند استخدام متصفح
نسخة الكود كما يلي:
وحدة النوع = "غير محدد"
لذلك يتم الحكم على الموقف أعلاه عند استخدام node.js ، وما إلى ذلك ، مما يشير أيضًا إلى أن jQuery قد أصبحت متضخمة.
حزمة العمود الفقري
افتح العمود الفقري وتحقق من ذلك
نسخة الكود كما يلي:
(وظيفة (الجذر ، المصنع) {
if (typeof define === 'function' && define.amd) {
DEFINE (['Underscore' ، 'jQuery' ، 'Exports'] ، function (_ ، $ ، orports) {
root.backbone = factory (الجذر ، الصادرات ، _ ، $) ؛
}) ؛
} آخر إذا (typeof orports! == 'undefined') {
var _ = require ('UndersCore') ؛
المصنع (الجذر ، الصادرات ، _) ؛
} آخر {
root.backbone = factory (root ، {} ، root._ ، (root.jquery || root.zepto || root.ender || root. $)) ؛
}
} (هذا ، الدالة (الجذر ، العمود الفقري ، _ ، $) {
العمود الفقري. $ = $ ؛
العودة العمود الفقري.
})) ؛
بالإضافة إلى الدعم غير المتزامن ، فإنه يعكس أيضًا اعتماده على jQuery و Swentscore.
نسخة الكود كما يلي:
DEFINE (['Underscore' ، 'jQuery' ، 'Exports'] ، function (_ ، $ ، orports) {
root.backbone = factory (الجذر ، الصادرات ، _ ، $) ؛
}) ؛
ويشير إلى أن العمود الفقري مدعوم أصليًا بواسطة requirejs.
حزمة السطح
لذلك ، نظرت إلى السطح مرة أخرى ووجدت أن هذه المكتبة احتلت رمزًا آخر _
نسخة الكود كما يلي:
(وظيفة() {
var root = this ؛
var _ = function (obj) {
إذا (OBJ مثيل _) إرجاع OBJ ؛
if (! (هذا مثيل _)) إرجاع جديد _ (obj) ؛
this._wrapped = obj ؛
} ؛
if (typeof orports! == 'undefined') {
if (typeof module! == 'undefined' && module.exports) {
الصادرات = module.exports = _ ؛
}
exports._ = _ ؛
} آخر {
root._ = _ ؛
}
if (typeof define === 'function' && define.amd) {
Define ('Underscore' ، [] ، function () {
يعود _؛
}) ؛
}
} .Call (هذا)) ؛
بشكل عام ، فهي وظائف مجهولة ، باستثناء أن طريقة Call () تستخدم في النهاية.