تعد سمة التوسيع للكائنات في JScript وسيلة مهمة لإضافة أعضاء إلى الأنواع المرجعية مثل Object وArray، لكن هذه الطريقة لا تعمل مع أنواع القيم، مثل
فار str = "string1";
str.method1 = وظيفة () {
// افعل شيئا
};
str.method1();// سيكون هناك خطأ هنا. رسالة الخطأ (لقد نسيت) هي أنه في حالة عدم وجود str،
لن يتم تشغيل مثل هذا البيان في برمجة C# أنواع القيمة لتحويلها إلى نوع مرجعي، يمكننا أيضًا إجراء عملية مماثلة في JScript تحويل الكائن (بشكل عام) إلى تمثيل سلسلة بحيث يمكن استعادة الكائن باستخدام وظيفة التقييم.
Boolean.prototype.box = function(){
إرجاع منطقية جديدة (هذا)؛
};
Number.prototype.box = function(){
إرجاع رقم جديد (هذا)؛
};
String.prototype.box = function(){
إرجاع سلسلة جديدة (هذا)؛
};
Boolean.prototype.unbox = function(){
إرجاع تقييم (this.toJSON())؛
};
Number.prototype.unbox = function(){
إرجاع تقييم (this.toJSON())؛
};
String.prototype.unbox = function(){
إرجاع تقييم (this.toJSON())؛
};box يعني الملاكمة، unbox يعني unboxing. رمز الاختبار هو كما يلي:
str = true.box();
تنبيه (شارع)؛
str = str.unbox();
تنبيه ( str )؛ في هذه المرحلة، يحتوي JScript أيضًا على عمليات ملاكمة. دعونا نلقي نظرة على البيان في البداية مرة أخرى، في هذا الوقت، يمكننا التعامل مع أنواع القيمة الثلاثة String و Boolean و Number تمامًا مثل Object. يمكننا إضافة سمة التوسيع إلى متغيرات نوع القيمة في وقت التشغيل مريحة للغاية؟
عملية فتح العلبة بسيطة جدًا أيضًا، ما عليك سوى استدعاء شيء مثل str.unbox().