setters و getters فى الجافاسكربت


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

بناء على ماتعلمناه فى الدروس السابقه من سلسله OOP javascript يمكننا إدراج setter و getter للخصائص بمنتهى السهوله كما يوضح الكود التالى

function User(name){
    var secret = "Iam Unique"; // private variable
    this.name = name; // public variable
    this.getTheSecret = function(){ // public method
        return secret;
    }
    this.setTheSecret = function(secret){ // public method
        secret = secret;
    }
}

يمكننا تجربه الكود السابق كما يوضح الكود التالى

var me = new User("Mostafa Farghaly");
alert(me.name); // Mostafa Farghaly
alert(me.secret); // Error: secret is undefined
alert(me.getTheSecret()); // Iam Unique
me.setTheSecret("I will dominate the world");
alert(me.getTheSecret()); // I will dominate the world

الخاصيه الخاصه secret يمكن الاستعلام عليها من الوظيفه getTheSecret و يمكن تعديلها من الوظيفه setTheSecret ، هذه الطريقه تعمل فى جميع المتصفحات ، لكن السوال هل يمكن استعلام و تعديل secret بدون استدعاء وظائف مع الحفاظ على كونها private variable كما يوضح الكود التالى :

alert(me.secret); // Iam Unqiue
me.secret = "I will dominate the world";
alert(me.secret); // I will dominate the world

بامكانك الان فى firefox3 و safari3 و opera 9.5 و بالطبع فى AIR/javascript عمل setters و getters فى صوره خصائص من خلال الوظيفتين __defineGetter__ و __defineSetter__ كما يوضح الكود التالى :

function User(name){
    this.name = name;
    var secret = "Iam Unique";
    this.__defineGetter__("secret",function(){ // secret getter
        return secret;
    });
    this.__defineSetter__("secret",function(newSecret){ // secret setter
        secret = newSecret;
    });
}

او يمكنك استخدام الكلمات المفتاحيه get و set اذا كنت تفضل طريقه ال object literal التى من عيوبها عدم امكانيه استخدام private variables كما يوضح الكود التالى :

var o= {
    a:7,
    get b(){
        return this.a+1;
    },
    set c(x){
        this.a = x/2 ;
    }

للمزيد من المعلومات عن ال setters و ال getters :

John Resig » JavaScript Getters and Setters

Mozilla » Defining Getters and Setters

About these ads

الأوسمة: ,

3 تعليقات to “setters و getters فى الجافاسكربت”

  1. Omar Al-Dolaimy Says:

    السلام عليكم،
    جافاسكربت أكبر مما تصورتها بكثير!، لم أتصور أنها تتوسع لهذه المرحلة!.
    توضيح رائع.
    رأيت هذا الأمر مستخدم في جي كويري!، لكنهم إستخدموها بشكل أوسع بكثير!
    ففكرتهم أن الGetter يجلب البيانات بالشكل العادي.
    لكن الSetter يرجع نفس الأوبجكت ليجعله صالح للإستخدام مرة أخرى:
    أنظر هذا الموضوع إقتبسته من طريقتهم وطبقته على JAVA (ليس جافاسكربت)، وقد نجح بشكل جميل :):
    فكرة! في كتابة الجافا OOP ـ set, get أسهل عند إعادة إستخدام الكود.

    شكراً لك لكل ما تكتب وأنا متابع منتظم لمدونتك :).

  2. mostafa farghaly Says:

    انا قرأته منذ كتبته يا عمر ممتاز ، تفكيرك يعجبنى كثيرا ، و ان شاء الله تقود العالم فى مجالك

  3. Omar Al-Dolaimy Says:

    الحمد لله إن فيه ناس تتابع :)،
    لكن أحيانا الواحد يظن أنه ما أحد يقرأ بسبب قلة التفاعل (ردود).

أضف تعليق

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

WordPress.com Logo

You are commenting using your WordPress.com account. تسجيل خروج   / تغيير )

Twitter picture

You are commenting using your Twitter account. تسجيل خروج   / تغيير )

Facebook photo

You are commenting using your Facebook account. تسجيل خروج   / تغيير )

Google+ photo

You are commenting using your Google+ account. تسجيل خروج   / تغيير )

Connecting to %s


تابع

Get every new post delivered to your Inbox.

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