جافاسكربت الموجهه بالكائنات و الذاكره


السلام عليكم و رحمه الله تعالى و بركاته

الكائنات التى يتم إنشائها بواسطه ال object literal يوجد منها نسخه واحده فى التطبيق بطبيعه الحال لأنها كائنات لا يمكن الاشتقاق منها ، لذلك لا تؤثر على الذاكره كثيرا ولا اداء التطبيق performance بالرغم ان كل خصائصها و طرقها تسجل فى الذاكره فورا دون استعمالها .

أما الكائنات التى تشتق من function constructor هى محور كتابتى لهذا الموضوع ، فى خلال سلسله OOP لن التزم بطريقه واحده فى كتابه ال function constructor ، الطريقه الاولى :

function User(name){ // User constructor
    this.name = name; 
    this.age; 
    this.dateOfBirth; 
    var secret; 
    this.getTheSecret = function(){ 
        return secret;
    }
    this.setTheSecret = function(newSecret){
        secret = newSecret;
    }
    this.sayHello = function(){/*code*/}
    this.go = function(where){/*code*/}
    this.sleep = function(time){/*code*/}
    this.eat = function(food){/*code*/}
    /* rest of User constructor */
}

عيب هذه الطريقه ان كل كائن يتم اشتقاقه من User function constructor فإنه يأخذ نسخه كامله منه و يضعها فى الذاكره تحت اسم هذا الكائن ، فتخيل لو ان هذا الكائن يحتوى على 100 وظيفه و خاصيه هذه ستكون كارثه على اداء التطبيق عند اشتقاق الكثير من الكائنات منه،  كما توضح الصوره التاليه :

no prototype

الطريقه الاخرى لكتابه User function constructor هو كتابه جميع الخصائص الخاصه و العامه و الوظائف الخاصه داخل ال constructor و كتابه الوظائف العامه كلها داخل ال constrcutor prototype كما يوضح الكود البسيط التالى :

function User(name){ // User constructor
    this.name = name; 
    this.age; 
    this.dateOfBirth; 
    var secret;
}
User.prototype = { 
    getTheSecret:function(){ 
        return secret;
    },
    setTheSecret:function(newSecret){
        secret = newSecret;
    },
    sayHello:function(){/*code*/},
    go:function(where){/*code*/},
    sleep:function(time){/*code*/},
    eat:function(food){/*code*/},
    /* rest of User prototype */
}

ميزه هذه الطريقه ان كل كائن يشتق من User function constructor يأخذ نسخه من الكود بداخل ال constructor  و لا ياخذ ما بداخل ال prototype لانه يرثه بطبيعه الحال نتيجه الاشتقاق و بذلك اشتقاق عدد كبير من الكائنات من هذا ال constructor لن يؤثر على كفاءه و اداء التطبيق كما توضح الصوره التاليه :

oo memory with prototyp

لذلك التزم بكتابه ال function constructor مثل الطريقه التانيه .

الأوسمة: , ,

2 تعليقان to “جافاسكربت الموجهه بالكائنات و الذاكره”

  1. ابراهيم Says:

    ممتاز يا أخ مصطفى أنا من المهتمين بي رفع مستوى أداء الجافاسكربت داخل النتصفح
    أشكرك على مشاركة هده الفكرة معنا🙂

    ——————-
    مدمن jQuery

  2. almhajer Says:

    صحيح كما ذكرت اخ مصطفى لانه يتم اخذ نسخة من الكائن وهو عيب في المترجم اصلا وان هذا العيب موجودا حتى في البي اتش بي وتم حل المشلة مع اصدار الخامس منها وانا لاحظت النقطة هذه من كتابة جون رسغ لمكتبته عندما قام ببناء الكائن عن طريق الدالة
    var $= new jqurey.fun.init وقام عملية ربط الوائف لتتم فق الى الاشارة لذلك من دون اخذ نسخة وبذل قام بحل المشكلة
    $.prototye=jquery.prototye
    مشور على هذا المقال الله بيسدد خطاك ودمت سالم

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s


%d مدونون معجبون بهذه: