القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة. اقرأ أكثر.

يتيح لك كائن وكيل JavaScript اعتراض سلوك كائن آخر وتخصيصه ، دون تعديل الكائن الأصلي.

باستخدام كائنات الوكيل ، يمكنك التحقق من صحة البيانات وتوفير وظائف إضافية والتحكم في الوصول إلى الخصائص والوظائف.

اكتشف كل شيء عن استخدامات كائنات الوكيل وكيف يمكنك إنشائها في JavaScript.

إنشاء كائن وكيل

في JavaScript ، يمكنك إنشاء كائنات وكيل باستخدام امتداد الوكيلالبناء. يأخذ هذا المُنشئ وسيطين: أ هدف كائن للالتفاف حول الوكيل و a معالج كائن تحدد خصائصه سلوك الوكيل عند تنفيذ العمليات.

يأخذ هذه الوسائط وينشئ كائنًا يمكنك استخدامه بدلاً من الكائن الهدف. يمكن لهذا الكائن الذي تم إنشاؤه إعادة تعريف العمليات الأساسية مثل الحصول على الخصائص وتعيينها وتعريفها. يمكنك أيضًا استخدام كائنات الوكيل هذه لتسجيل الوصول إلى الخصائص والتحقق من صحة المدخلات أو تنسيقها أو تعقيمها.

على سبيل المثال:

مقدار ثابت originalObject = {
فو: "حاجِز"
}

مقدار ثابت معالج = {
يحصل: وظيفة(الهدف ، الممتلكات){
يعود الهدف [خاصية] ؛
},
تعيين: وظيفة(الهدف ، الممتلكات ، القيمة){
الهدف [الخاصية] = القيمة ؛
}
};

instagram viewer

مقدار ثابت الوكيل = جديدالوكيل(originalObject ، معالج)

هذا الرمز ينشئ كائنًا مستهدفًا ، originalObject، بملكية واحدة ، فو، وكائن معالج ، معالج. يحتوي كائن المعالج على خاصيتين ، يحصل و تعيين. تُعرف هذه الخصائص بالفخاخ.

اعتراض كائن الوكيل هو وظيفة تسمى كلما قمت بتنفيذ إجراء محدد على كائن وكيل. تسمح لك الاعتراضات باعتراض سلوك الكائن الوكيل وتخصيصه. يؤدي الوصول إلى خاصية من كائن الوكيل إلى استدعاء يحصل trap ، وتعديل الخاصية أو معالجتها من كائن الوكيل يستدعي تعيين فخ.

أخيرًا ، يُنشئ الرمز كائنًا وكيلاً بامتداد الوكيل البناء. لقد مرت originalObject و معالج ككائن الهدف والمعالج ، على التوالي.

استخدام كائنات الوكيل

تستخدم كائنات البروكسي عدة استخدامات في JavaScript ، بعضها على النحو التالي.

إضافة وظائف إلى كائن

يمكنك استخدام كائن وكيل لالتفاف كائن موجود وإضافة وظائف جديدة ، مثل التسجيل أو معالجة الأخطاء، دون تعديل الكائن الأصلي.

لإضافة وظائف جديدة ، سوف تحتاج إلى استخدام الوكيل منشئ وحدد واحدًا أو أكثر من التراكبات للإجراءات التي تريد اعتراضها.

على سبيل المثال:

مقدار ثابت userObject = {
الاسم الأول: "كينيدي",
اسم العائلة: "مارتينز",
العمر: 20،
};

مقدار ثابت معالج = {
يحصل: وظيفة(الهدف ، الممتلكات){
وحدة التحكم.سجل("الحصول على الملكية"$ {property}"`);
يعود الهدف [خاصية] ؛
},
تعيين: وظيفة(الهدف ، الممتلكات ، القيمة){
وحدة التحكم.سجل(`` خاصية الإعداد "$ {property}" إلى قيمة "{القيمة}"`);
الهدف [الخاصية] = القيمة ؛
},
};

مقدار ثابت الوكيل = جديدالوكيل(userObject ، معالج) ؛

وحدة التحكم.log (proxy.firstName) ؛ // الحصول على خاصية "firstName" كينيدي
وحدة التحكم.log (proxy.lastName) ؛ // الحصول على خاصية Martins "lastName"
proxy.age = 23; // إعداد الملكية "عمر" إلى قيمة "23"

تضيف كتلة التعليمات البرمجية هذه وظائف عبر اعتراضات الوكيل ، يحصل و تعيين. الآن ، عند محاولة الوصول إلى أو تعديل خاصية من userObject، سيقوم كائن الوكيل أولاً بتسجيل عمليتك في وحدة التحكم قبل الوصول إلى الخاصية أو تعديلها.

التحقق من صحة البيانات قبل تعيينها على كائن

يمكنك استخدام كائنات الوكيل للتحقق من صحة البيانات والتأكد من أنها تفي بمعايير معينة قبل تعيينها على كائن. يمكنك القيام بذلك عن طريق تحديد منطق التحقق في ملف تعيين فخ في معالج هدف.

على سبيل المثال:

مقدار ثابت userObject = {
الاسم الأول: "كينيدي",
اسم العائلة: "مارتينز",
العمر: 20،
};

مقدار ثابت معالج = {
يحصل: وظيفة(الهدف ، الممتلكات){
وحدة التحكم.سجل("الحصول على الملكية"$ {property}"`);
يعود الهدف [خاصية] ؛
},
تعيين: وظيفة(الهدف ، الممتلكات ، القيمة){
لو (
ملكية "عمر" &&
نوع من القيمة == "رقم" &&
قيمة> 0 &&
القيمة <120
) {
وحدة التحكم.سجل(`` خاصية الإعداد "$ {property}" إلى قيمة "{القيمة}"`);
الهدف [الخاصية] = القيمة ؛
} آخر {
يرميجديدخطأ("معلمة غير صالحة. يرجى المراجعة والتصحيح ".);
}
},
};

مقدار ثابت الوكيل = جديدالوكيل(userObject ، معالج) ؛
proxy.age = 21 ؛

يضيف مقطع التعليمات البرمجية هذا قواعد التحقق من الصحة إلى ملف تعيين فخ. يمكنك تعيين أي قيمة لملف عمر الممتلكات على userObject مثال. ولكن مع قواعد التحقق المضافة ، لا يمكنك تعيين قيمة جديدة لخاصية العمر إلا إذا كانت رقمًا ، وأكبر من 0 ، وأقل من 120. أي قيمة تحاول تعيينها على عمر الخاصية التي لا تفي بالمعايير المطلوبة ستطلق خطأ وستطبع رسالة خطأ.

التحكم في الوصول إلى خصائص الكائن

يمكنك استخدام كائنات الوكيل لإخفاء خصائص معينة لكائن ما. قم بذلك عن طريق تحديد منطق التقييد في يحصل فخ للخصائص التي تريد التحكم في الوصول إليها.

على سبيل المثال:

مقدار ثابت userObject = {
الاسم الأول: "كينيدي",
اسم العائلة: "مارتينز",
العمر: 20،
هاتف: 1234567890 ،
بريد إلكتروني: "[email protected]",
};

مقدار ثابت معالج = {
يحصل: وظيفة(الهدف ، الممتلكات){
لو (ملكية "هاتف" || ملكية "بريد إلكتروني") {
يرميجديدخطأ("الوصول إلى المعلومات مرفوض");
} آخر {
وحدة التحكم.سجل("الحصول على الملكية"$ {property}"`);
يعود الهدف [خاصية] ؛
}
},
تعيين: وظيفة(الهدف ، الممتلكات ، القيمة){
وحدة التحكم.سجل(`` خاصية الإعداد "$ {property}" إلى قيمة "{القيمة}"`);
الهدف [الخاصية] = القيمة ؛
},
};

مقدار ثابت الوكيل = جديدالوكيل(userObject ، معالج) ؛

وحدة التحكم.log (proxy.firstName) ؛ // الحصول على خاصية "firstName" كينيدي
وحدة التحكم.log (proxy.email) ؛ // يلقي خطأ

تضيف كتلة التعليمات البرمجية أعلاه قيودًا معينة إلى ملف يحصل فخ. في البداية ، يمكنك الوصول إلى جميع الخصائص المتاحة على userObject. تمنع القواعد المضافة الوصول إلى المعلومات الحساسة مثل البريد الإلكتروني أو الهاتف الخاص بالمستخدم. ستؤدي محاولة الوصول إلى أي من هذه الخصائص إلى ظهور خطأ.

مصائد الوكيل الأخرى

ال يحصل و تعيين التراكبات هي الأكثر شيوعًا وفائدة ، ولكن هناك 11 فخًا آخر لوكيل JavaScript. هم:

  • يتقدم: ال يتقدم يعمل التراكب عند استدعاء دالة على الكائن الوكيل.
  • بناء: ال بناء يتم تشغيل الملائمة عند استخدام عامل التشغيل الجديد لإنشاء كائن من كائن الوكيل.
  • حذف الملكية: ال حذف الملكية يعمل المصيدة عند استخدام ملف يمسح عامل لإزالة خاصية من الكائن الوكيل.
  • لديه - ال لديه يعمل المصيدة عند استخدام ملف في عامل التشغيل للتحقق مما إذا كانت الخاصية موجودة في كائن الوكيل.
  • تملك المفاتيح - ال تملك المفاتيح يعمل المصيدة عند استدعاء أي منهما Object.getOwnPropertyNames أو Object.getOwnPropertySymbols تعمل على كائن الوكيل.
  • getOwnPropertyDescriptor - ال getOwnPropertyDescriptor يعمل المصيدة عند استدعاء Object.getOwnPropertyDescriptor تعمل على كائن الوكيل.
  • تعريف الملكية - ال تعريف الملكية يعمل المصيدة عند استدعاء Object.defineProperty تعمل على كائن الوكيل.
  • منع الامتدادات - ال منع الامتدادات يعمل المصيدة عند استدعاء Object.preventExtensions تعمل على كائن الوكيل.
  • قابل للتمدد - ال قابل للتمدد يعمل المصيدة عند استدعاء Object.is قابل للتمدد تعمل على كائن الوكيل.
  • getPrototypeOf - ال getPrototypeOf يعمل المصيدة عند استدعاء Object.getPrototypeOf تعمل على كائن الوكيل.
  • setPrototypeOf - ال setPrototypeOf يعمل المصيدة عند استدعاء Object.setPrototypeOf تعمل على كائن الوكيل.

مثل ال تعيين و يحصل traps ، يمكنك استخدام هذه التراكبات لإضافة طبقات جديدة من الوظائف والتحقق من الصحة والتحكم في الكائن الخاص بك دون تعديل الأصل.

سلبيات كائنات الوكيل

يمكن أن تكون كائنات الوكيل أداة قوية لإضافة وظائف مخصصة أو التحقق من صحة كائن. لكن لديهم أيضًا بعض العيوب المحتملة. تتمثل إحدى هذه العوائق في صعوبة تصحيح الأخطاء ، حيث قد يكون من الصعب رؤية ما يحدث خلف الكواليس.

يمكن أيضًا أن يكون من الصعب استخدام كائنات البروكسي ، خاصة إذا لم تكن على دراية بها. يجب أن تفكر جيدًا في هذه العيوب قبل استخدام كائنات الوكيل في التعليمات البرمجية الخاصة بك.