السلام عليكم و رحمه الله تعالى و بركاته
الوراثه فى جافاسكربت prototypal بمعنى ان الكائنات ترث من بعضها ، لا يوجد class فى اللغه لذلك لايوجد classical inheritance ، و عليه لا يوجد كلمتى extend او inherit ، لكنه بالرغم من ذلك يمكن لكائنات الجافاسكربت الوراثه من بعضها عن طريق الخاصيه prototype التى ذكرتها فى الجزء الثالث ، و المثال البسيط التالى يوضح إنشاء اتنين function constructor :
function Parent(){ // User constructor
this.color = "black"; // public variable
this.hair = "brown"; // public variable
}
function Child(){
this.name="mostafa"; // public variable
this.color = "white"; // public variable
}
فى الكود السابق انشأت اتنين constructor الاول بإسم Parent له خاصيتين color و hair ، و الconstructor التانى بإسم child يحتوى على خاصيتين name و color . أما الكود التالى فيوضح كيفيه وراثه Child من Parent :
Child.prototype = new Parent();
فى الكود السابق Child يرث Parent ، عن طريق تسجيل كائن جديد من نوع Parent لل Child.prototype التى تستخدم كما وضحت فى الجزء الثالث لإضافه خصائص ووظائف عامه جديده و يوضح الكود التالى إنشاء كائن جيده من Child بعد وراثته من Parent
var me = new Child();
alert(me.color); // white
alert(me.name); // mostafa
alert(me.hair); // brown
كما بوضح الكود السابق الكائن الجديد me المشتق من Child قد ورث الخاصيه hair من parent و لم يرث الخاصيه color لأنها موجوده فى ال Child ، و نظام الوراثه فى جافاسكربت لا يورث الخصائص التى بنفس الإسم بين الكائنين .
لكن ماذا عن الخصائص الخاصه private variables هل تورث بين الكائنات ؟ لا – كما يوضح المثال التالى :
function Parent(){ // User constructor
var secret = "Iam not your dad"; // private variable
this.color = "black"; // public variable
this.hair = "brown"; // public variable
}
function Child(){
this.name="mostafa"; // public variable
this.color = "white"; // public variable
this.getSecret = function(){
alert(secret)
}
}
فى الكود السابق قمت بإضافه ال private variable بإسم secret فى ال Parent ، و قمت بإضافه الوظيفه getSecret فى Child التى تقوم بعمل alert لل secret ، مع ملاحظه انها لاتحتوى على المتغير secret ، تجربه الوراثه هى التى ستثبت لنا انها لن ترث هذه المتغير الخاص فى Parent كما يوضح الكود التالى :
Child.prototype = new Parent(); // child inherits parent
var me = new Child();
me.getSecret(); // Error: secret is not defined
الأوسمة: javascript, oop
03/01/2009 عند 9:21 م |
الف شكر
18/01/2009 عند 10:48 م |
شكراً لك، درس واضح وأفادني
ضع مواضيع أكثر
جزاك الله كل الخير
19/01/2009 عند 3:46 م |
الشكر لله بإذن الله سأكتب المزيد