السلام عليكم و رحمه الله تعالى و بركاته
بناء على ماتعلمناه فى الدروس السابقه من سلسله 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
الأوسمة: javascript, oop
23/01/2009 عند 9:36 ص |
السلام عليكم،
:
جافاسكربت أكبر مما تصورتها بكثير!، لم أتصور أنها تتوسع لهذه المرحلة!.
توضيح رائع.
رأيت هذا الأمر مستخدم في جي كويري!، لكنهم إستخدموها بشكل أوسع بكثير!
ففكرتهم أن الGetter يجلب البيانات بالشكل العادي.
لكن الSetter يرجع نفس الأوبجكت ليجعله صالح للإستخدام مرة أخرى:
أنظر هذا الموضوع إقتبسته من طريقتهم وطبقته على JAVA (ليس جافاسكربت)، وقد نجح بشكل جميل
فكرة! في كتابة الجافا OOP ـ set, get أسهل عند إعادة إستخدام الكود.
شكراً لك لكل ما تكتب وأنا متابع منتظم لمدونتك
.
23/01/2009 عند 11:17 ص |
انا قرأته منذ كتبته يا عمر ممتاز ، تفكيرك يعجبنى كثيرا ، و ان شاء الله تقود العالم فى مجالك
24/01/2009 عند 11:22 ص |
الحمد لله إن فيه ناس تتابع
،
لكن أحيانا الواحد يظن أنه ما أحد يقرأ بسبب قلة التفاعل (ردود).