احذر من with


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

تستخدم with لتقليل الكود عن طريق الإشاره إلى كائن ما مره واحده فقط ثم استخدام خصائصه و وظائفه اكثر من مره ، كما يوضح الكود البسيط التالى :

var me = {
    name:"mostafa farghaly",
    age:21,
    saySomething:function(){
        alert("I'll dominate the world");
    }
}

with(me){
    name = "Sherif kotb";
    age = 22;
    saySomething(); // I'll dominate the world
}
    

يعمل الكود السابق بدون اخطأء لأنه يستخدم with للتعديل على خصائص الكائن me و يقوم بإستدعاء الوظيفه saySomething ، لكن ماذا إذا قمت بتسجيل خصائص او وظائف جديده للكائن عن طريق with ؟ هنا توجد المشاكل حيث تسجل هذه الوظائف و الخصائص الجديده فى ال global object و لا يتم ربطها بالكائن الحالى كما يوضح المثال البسيط التالى :

with(me){
    color = "wheaten";
    blog = "keepondev";
    go = function(){
        alert("go go go!");
    }
}
alert(me.color); // Error: undefined
alert(color); // wheaten
alert(me.blog); // Error: undefined
alert(blog); // keepondev
me.go(); // Error me.go isn't function
go(); // go go go!

كما ترى اى خاصيه او وظيفه جديده تسجل للكائن الحالى عن طريق with لن يتم ربطها بهذا الكائن ، لكن سيتم وضعها فى ال global object و هذا قد يؤدى الى نتائج غير متوقعه فى التطبيقات الكبيره التى تكون بها الكثير من المتغيرات فى ال global object و قد يؤدى الى overloading ، لذلك لا تستخدم with ، إستخدام chaining كما شرحت من قبل افضل بكثر ، و اذا كان لابد من with فإستخدمها بحذر او استخدمها مع استدعاء الوظائف فقط .

الأوسمة:

2 تعليقان to “احذر من with”

  1. almahjer Says:

    بارك الله فيك اخي على المعلومات المفيدة هيا بشكل عام
    استعمالها نادر عن نفسي لااستعملها مطلقا زيادة سطر مش راح تاثر
    شكرا جزيلا

  2. phpreference Says:

    شكراً أخي علي هذا الدرس المفيد
    ومنتظرين دوره design pattern لنتعرف عليها في javascript

أضف تعليقاً

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

WordPress.com Logo

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

صورة تويتر

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

Facebook photo

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

Google+ photo

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

Connecting to %s


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