Getter هي طريقة للحصول على قيمة السمة ، و Setter هي وسيلة لتعيين قيمة السمة. يمكن تعريف طرق Getter و Setter لأي كائن أساسي محدد مسبقًا أو كائنًا محددًا من قبل المستخدم ، إضافة خصائص جديدة إلى الكائنات الموجودة.
هناك طريقتان لتحديد طريقة getter أو setter:
1. تحديد عند تهيئة الكائن
2. بعد تعريف الكائن ، تتم إضافة التعريف من خلال أساليب __definegetter __ و __definesetter__.
الشيء الوحيد الذي يجب القيام به عند تحديد طرق Getter و Setter باستخدام عملية تهيئة الكائن هو بادئة "GET" في طريقة getter و "SET" في طريقة Setter.
شيء آخر يجب ملاحظة أن طريقة getter لا تحتوي على معلمات ، ويجب أن تحتوي طريقة Setter على معلمة ، أي القيمة الجديدة للسمة التي سيتم تعيينها.
على سبيل المثال:
نسخة الكود كما يلي:
o = {
القيمة: 9 ،
احصل على B () {return this.value ؛} ،
تعيين Setter (x) {this.value = x ؛}
}
بعد تعريف الكائن ، أضف طريقة getter أو setter إلى الكائن ، يتم استخدام طريقتين خاصتين __definegetter__ و __definesetter__. تتطلب هاتان وظيفتان الأول أن يكونوا اسم getter أو setter ، ويرد في السلسلة ، والمعلمة الثانية هي وظيفة كجائزة أو setter.
على سبيل المثال ، نضيف سمة سنة إلى كائن التاريخ:
نسخة الكود كما يلي:
date.prototype .__ definester __ ('year' ، function () {return this.getlyear () ؛}) ؛
Date.Prototype .__ Definesetter __ ('Year' ، function (y) {this.setlyear (y)}) ؛
var الآن = تاريخ جديد ؛
تنبيه (الآن.
الآن.
تنبيه (الآن) ؛
فيما يتعلق بالشكل الذي يعتمد بشكل أساسي على نمط البرمجة الفرد ، فإن النموذج الأول مضغوط وأسهل في الفهم. ولكن إذا كنت ترغب في إضافة getter أو setter بعد تعريف الكائن ، أو أن النموذج الأولي لهذا الكائن لا يكتب بواسطتك أو مدمج ، فعليك استخدام الطريقة الثانية.
فيما يلي تطبيق يضيف سمة النص الداخلي إلى متصفح Mozilla:
نسخة الكود كما يلي:
htmlelement.prototype .__ definester__
((
"النص الداخلي" ، الوظيفة ()
// تحديد طريقة getter للحصول على قيمة النص الداخلي ،
// حتى تتمكن من قراءتها الآن!
{
var textrange = this.OwnerDocument.createRange () ؛
// باستخدام النطاق لاسترداد محتوى الكائن
textrange.selectnodecontents (هذا) ؛
// فقط احصل على محتوى عقدة الكائن
إرجاع textrange.toString () ؛
// إعطاء innertext قيمة محتوى العقدة
}