>> OOP فى الجافا سكريبت ... لا تشابه مع PHP !!!
2006-10-20 (1427-9-27)- في :برمجة الويب - جافاسكربت - التعليقات (0)أحد الأخوة وضع موضوعا في سوالف عن برمجة الكائنات في جافاسكربت و لتقريب المثال وضع كود بي اتش بي المكافئ(نوعا ما ) لكود جافاسكربت …
ما أود التنبيه اليه هو أن نظام الكائنات في جافاسكربت يختلف جذريا عن بي اتش بي و فهم هذا الاختلاف مهم للغاية لكي تتعامل مع جافاسكربت بشكل جيد…
الحقيقة هو أن جافاسكربت لا توجد فيها كلاسات بالمعنى المعروف للكلاسات (؟؟؟) و انما توجد فيها منشئات كائنات Object Constructors و هي الدوال التي نعرفها و نستنسخ منها كائنات باستخدلم الكلمة new و لست مضطرا لعمل ذلك لانه يكفي ان تستخدم الدالة المنشئة لنوع object المعرف في اللغة هكذا …
newObject = new Object();
بعدها بامكانك اضافة الخصائص و الأدوات methods لهذا الكائن هكذا …
newObject.mytext = 'some text goes here';
newObject.myMethod = function(){
alert('Hello! this function was added dynamically');
}
و هذا لا يمكن عمله في بي اتش بي أبدا …
لماذا نستخدم اذا تلك الدوال التي وضعت في المقال ؟ … الجواب هو فقط لتهيئة الخصائص و الادوات methods المبدئية و التي نتوقع استخدامها و الا فان ما يوضع في تلك الدالة ليس بالضرورة نهاية الامر … الان انظر لهذا
function site(name, url){
this.name = name;
this.url = url;
this.say(){
alert('The site name is:' + name + '...... and the url is '+ url);
}
}
IslamWay = new site('IslamWay', 'http://www.islamway.com');
alburhan= new site('alburhan','http://www.alburhan.com');
IslamWay.tags = 'Quran, Nasheed, Flash, Fatawa, Articles';
alert(IslamWay.tags); // displays: Quran, Nasheed, Flash, Fatawa, Articles
alert(alburhan.tags); // displays : undefined
الان عرفنا منشئة كائنات اسمها site ثم استنسخنا منها كائنين islamWay & alburhan لكل منهما الخاصيتين name و url و الاداة say … الى الان جميل .. لكن بعدها عرفنا خاصية اضافية للكائن IslamWay اسمها tags … لاحظ ان alburhan لا تمتلك هذه الخاصية مع انها من نفس الكائن IslamWay !!!
لو أردنا اضافة تلك الخاصية الى جميع الكائنات من نوع site فاننا نضيفها كالتالي
function site(name, url){
this.name = name;
this.url = url;
this.say(){
alert('The site name is:' + name + '...... and the url is '+ url);
}
}
IslamWay = new site('IslamWay', 'http://www.islamway.com');
alburhan= new site('alburhan','http://www.alburhan.com');
//نضيف الخاصية الى هيكل الكائن عبر الخاصية
// prototype
site.prototype.tags = 'Quran, Nasheed, Flash, Fatawa, Articles';
alert(IslamWay.tags); // displays: Quran, Nasheed, Flash, Fatawa, Articles
alburhan.tags = 'ture truth ...';
alert(alburhan.tags); // displays : true truth
خاصية prototype موجودة لأي كائن تنشأه حتى لو لم تضفها بنفسك و هي الطريقة الافضل لاضافة خواص جديدة و أدوات جديدة لأي نوع …
prototype هي الطريقة الوحيدة للتوارث في جافاسكربت حيث لا توجد كلمة extends كما هو الحال في اللغات الأخرى …
صراحة أخذ مني فهم الكائنات في جافاسكربت وقتا ليس بقليل لكني أقدر الان سهولته و جماله و مناسبته للعمل … و ما سبق ليس بأي حال عرضا كاملا لبرمجة الكائنات في جافاسكربت و لكن هذه هي مصادري و أرجو ان تجد فيها نفعا :
– JavaScript : Douglas Crockford’s Wrrrld Wide Web
- Object Oriented Programming in JavaScript
Object Hierarchy and Inheritance in JavaScript
اترك تعليقا....
جاري ارسال التعليق.... 