rIslamic - الخلاصات - الارشيف -مفضلتي - راسلني 

>> OOP فى الجافا سكريبت ... لا تشابه مع PHP !!!



أحد الأخوة وضع موضوعا في سوالف عن برمجة الكائنات في جافاسكربت و لتقريب المثال وضع كود بي اتش بي المكافئ(نوعا ما ) لكود جافاسكربت …

ما أود التنبيه اليه هو أن نظام الكائنات في جافاسكربت يختلف جذريا عن بي اتش بي و فهم هذا الاختلاف مهم للغاية لكي تتعامل مع جافاسكربت بشكل جيد… الحقيقة هو أن جافاسكربت لا توجد فيها كلاسات بالمعنى المعروف للكلاسات (؟؟؟) و انما توجد فيها منشئات كائنات 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

closures

Object Hierarchy and Inheritance in JavaScript




اترك تعليقا....




--- بامكانك استخدام [ Textile ]





Imagine what you desire. Will what you imagine. Create what you will.(George Bernard Shaw) : Love what you create (me)