دالة getter في JavaScript
البنية get
تؤدي إلى ربط خاصية من خاصيات الكائن بدالة التي ستستدعى عند محاولة الوصول إلى قيمة تلك الخاصية.
البنية العامة
{get prop() { ... } }
{get [expression]() { ... } }
prop
اسم الخاصية الذي سترتبط بالدالة المعطية.
expression
بدءًا من ECMAScript 2015 (أي ES6)، يمكن استخدام التعابير لإنشاء أسماء محسوبة للخاصيات التي سترتبط بالدالة المعطية.
الوصف
يمكن أن تستخدم دالة getter في JavaScript لتنفيذ دالة معيّنة عندما تتم محاولة الوصول إلى خاصية من خاصيات الكائن بغية إعادة قيمة محسوبة ديناميكيًا، ولا يجوز استخدام دالة getter على خاصية تحمل قيمةً ما في نفس الوقت. يجدر بالذكر أنَّ دوال getter تُستخدَم عادةً مع دوال setter لإنشاء «خاصية زائفة» (pseudo-property).
لاحظ الأمور الآتية عند التعامل مع بنية get
:
- يمكنها أن تملك مُعرِّفًا رقميًا أو سلسلةً نصيةً.
- يجب ألّا يكون لها أيّة وسائط.
- لا يجوز تعريف أكثر من دالة getter لنفس الخاصية، ولا يجوز أن تُسنَد قيمةٌ إلى الخاصية مسبقًا (أي لا يجوز استخدام
{ get x(v) { }, get x(v) { } }
أو { x: ..., get x(v) { } }
).
يمكن إزالة دالة getter باستخدام المعامل delete
.
أمثلة
تعريف دالة getter عند تهيئة الكائنات
المثال الآتي يُعرِّف خاصيةً زائفةً باسم latest
في الكائن obj
، وهذه الخاصية ستُعيد آخر عنصر في المصفوفة log
:
var obj = {
log: ['example','test'],
get latest() {
if (this.log.length == 0) return undefined;
return this.log[this.log.length - 1];
}
}
console.log(obj.latest); // "test".
لاحظ أنَّ محاولة إسناد قيمة إلى الخاصية latest
لن تؤدي إلى تغييرها.
إزالة دالة getter باستخدام المعامل delete
إذا أردتَ إزالة دالة getter، فيمكنك استخدام المعامل delete
عليها كما يلي:
delete obj.latest;
تعريف دالة getter باستخدام defineProperty
إذا أردتَ إضافة دالة getter إلى كائن موجود مسبقًا في أيّ وقت، فيمكنك استخدام الدالة Object.defineProperty()
كما في المثال الآتي:
var o = {a: 0};
Object.defineProperty(o, 'b', { get: function() { return this.a + 1; } });
console.log(o.b) // استدعاء الدالة، التي ستُعيد قيمة المتغير + 1
استخدام أسماء الخاصيات المحسوبة
var expr = 'foo';
var obj = {
get [expr]() { return 'bar'; }
};
console.log(obj.foo); // "bar"
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | 1 | 2 | 9 | 9.5 | 3 |
أسماء الخاصيات المحسوبة | 46 | 34 | غير مدعومة | 47 | غير مدعومة |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.