1. نظرة عامة على الوظائف المجهولة
المرة الأولى التي عرفت فيها عن الوظائف المجهولة كانت في الكود المصدري لـ jquery، وكان أول شيء رأيته عندما فتحت jQuery
انسخ رمز الكود كما يلي:
(وظيفة(نافذة، غير محددة) {.............................})(نافذة)؛
هذه وظيفة مجهولة، مع معلمات باللون الأحمر. تتمثل وظيفة الوظيفة المجهولة في إنشاء منطقة مغلقة، ولا يمكن الوصول إلى المتغيرات والأساليب الموجودة بالداخل من الخارج.
بما أنه لا يمكن الوصول إليه، كيف يمكن استدعاء jquery؟ وذلك لأن وظيفة jquery المجهولة تحتوي على هاتين الجملتين (النص الأزرق):
انسخ رمز الكود كما يلي:
(وظيفة (نافذة، غير محددة) {
// تحديد نسخة محلية من jQuery
فار jQuery = وظيفة(محدد، سياق) {
// كائن jQuery هو في الواقع مُنشئ init "مُحسّن"
إرجاع jQuery.fn.init جديد (selector، context)؛
},
.........
window.jQuery = window.$ = jQuery;
})(نافذة);
اتضح أنه يتم تمرير jQuery إلى النافذة في الوظيفة المجهولة، ولهذا السبب يتم تمرير النافذة عند تمرير المعلمات، لذلك في كل مرة يتم فيها استدعاء jquery في المستقبل، يتم استدعاء كائن jQuery الخاص بالنافذة بالفعل.
يستدعي jquery أساليبه الخاصة. لا يمكن استدعاؤه من الخارج مما يضمن السلامة وعدم وجود صراع.
2. نواصل الموضوع أعلاه، حول المكونات الإضافية لـ jQuery
ما يلي هو جزء من التعليمات البرمجية للتحكم في الترحيل التي كتبتها:
انسخ رمز الكود كما يلي:
؛(الدالة ($) {
$.fn.tabing = الوظيفة (arg) {
مثيل = البرنامج المساعد الجديد (هذا، arg)؛
};
مثيل فار = فارغ؛
وظيفة البرنامج المساعد (العنصر) {
this._tabs = $(element);
this._tabli = $("a[href*='#']",this._tabs);
this._tabDiv = this._tabs.siblings().filter("div[id*='tab']");
this.init();
}
البرنامج المساعد.النموذج الأولي = {
الحرف الأول: وظيفة () {
this._tabli.addClass("unselected");
this._tabli.eq(0).addClass("selected");
this._tabDiv.css("display"،"none");
this._tabDiv.eq(0).css("display"،"block")؛
this._tabli.each(function(){
$(هذا).bind("انقر"،function(){
for(var i = 0;i<instance._tabDiv.length;i++){
example._tabDiv.eq(i).css("display"،"none");
}
example._tabDiv.filter("#"+$(this).attr("href").split('#')[1]).css("display"،"block");
});
})
}
}
})(مسج);
انتبه إلى الكلمات الحمراء. في الواقع، تكتب المكونات الإضافية لـ jQuery أيضًا وظائف مجهولة، مما يضمن استقلالية كل مكون إضافي هناك جدولة في هذا البرنامج الإضافي لـ jquery's fn.
بهذه الطريقة، يمكن لكائن jquery الخارجي استدعاء الجدولة مباشرة، وهي أيضًا جهة الاتصال الوحيدة بين المكون الإضافي والعالم الخارجي.
3. بعد الحديث عن استخدام الوظائف المجهولة بواسطة المكون الإضافي jquery، فلنتحدث عن الوظائف المجهولة للنافذة.
في الواقع، jquery نفسها هي الوظيفة المجهولة للنافذة، وهذه هي النقطة الأولى، فكيف نكتب الوظيفة المجهولة للنافذة؟
أي أنه بعد كتابة الدالة المجهولة، توجد واجهة للتفاعل مع النافذة الموجودة في الدالة، مثل ما يلي:
انسخ رمز الكود كما يلي:
(وظيفة(){
الدالة getObjByID(id){
إرجاع document.getElementById(id);
}
وظيفة __addClass(id,className,classValue){
$(id).style.className=classValue;
}
window.addClass=__addClass;
})();
انظر أيضًا إلى الكلمات الحمراء، حتى تتمكن من استدعاء addClass() خارج الوظيفة المجهولة، لكن لا يمكنك الاتصال بـ getObjByID().
4. سيتم أيضًا تنفيذ الوظائف المجهولة أثناء التحليل
على النحو التالي:
انسخ رمز الكود كما يلي:
وظيفة الفيديو () { }؛
وظيفة الفيلم () { }؛
var _video = new Video();
_video.size = 3;
_video.toString = الوظيفة () {
إرجاع "فيديو" ؛
};
_video.getName = الوظيفة () {
إرجاع "VideoXXX"؛
};
var _movie = new Movie();
(وظيفة (الوالد، الطفل) {
لـ (var ele في الأصل) {
if (!child[ele]) // سيتم نسخ نسخة من الأصل فقط عندما لا يحتوي الطفل على السمة أو الطريقة.
Child[ele] =parent[ele];
}
})(_video, _movie); // كيفية استدعاء وظيفة مجهولة
تنبيه (_movie.size)؛ //3
تنبيه(_movie.toString()); //[كائن كائن]
تنبيه(_movie.getName()); //VideoXXX
جميع التنبيهات الثلاثة لها نتائج تشير إلى أن الوظيفة المجهولة يتم تنفيذها داخليًا.