فيما يتعلق بكائن القاموس للبرنامج النصي، أعتقد في الواقع أن MS استعار في البداية من لغات البرمجة النصية الديناميكية مثل Python، وتم تطويره للعملاء، لهذه النقطة، يمكنك الرجوع إلى الصفحة 137 من الدليل المرجعي لمبرمجي ASP الخاص بـ wrox. سيؤدي حفظ كائن القاموس على مستوى الجلسة إلى تقليل أداء النظام، بينما يؤدي حفظ كائن القاموس على مستوى التطبيق إلى تعطل خادم الويب، ولن أتحدث عن هذا أكثر.
علينا الآن أن نأخذ بعين الاعتبار عيوب التصميم الموجودة عندما يكون كائن القاموس موجودًا في صفحة واحدة:
يمكنك تجربة هذا
تعيين rs=server.createobject(adodb.recordset)
sql=select * من الجدول
rs.open SQL، كون، 1،3
تعيين ttt=server.createobject(scripting.dictionary)
ttt.add xxx,rs(حقل)
تعيين RS=لا شيء
liu=ttt(xxx) 'ماذا ستجد عندما تفعل هذا؟ ستخبرك صفحة ASP بحدوث حادث! ! ! وهذا أمر مدهش للغاية. ما هو الحادث؟ من الصعب القول. لاحقًا، بعد الاختبار المتكرر، اكتشفت أن السبب هو أنه لا يمكن إعطاء قيمة rs(field) مباشرة لكائن القاموس. بعد البحث المتكرر، توصلت إلى الاستنتاج التالي: يقوم القاموس بتخزين عنوان الذاكرة of rs(field). في هذه الحالة، ما كتبته للتو هو بلا شك كارثة، الحل هو وضع هذا rs (الحقل) في متغير. هذا سؤال كبير، لذلك قمت بكتابة هذا البرنامج مرة أخرى، يمكنك حفظه كمحاولة.htm لرؤية التأثير.
<لغة البرنامج النصي='vbscript'>
تعيين ttt=createobject(scripting.dictionary)
ttt.add ليو، uuu
تعيين ddd=createobject(scripting.dictionary)
ddd.add تعادل القوة الشرائية، TTT
setttt=لا شيء
bbb=ddd(ppp)(ليو)
تنبيه (بي بي بي)
</script>
ما هي النتيجة؟ ستجد أنه لا توجد مشكلة في وصف التنبيه uuu، وهذا يعني أن كائن القاموس يحل محل كائن آخر بالفعل
يأتي الاستنساخ الكامل لكائن القاموس، والذي يتحقق أيضًا مما هو مكتوب في كتاب wrox من أنه تم استخدام كائن القاموس عندما تم تطوير ms.
إنه في الواقع للعميل، هذا ما أقوله.
يمكنني أيضًا أن أعرض لك رمز الجمع بين المصفوفات والقواميس.
<لغة البرنامج النصي='vbscript'>
أنا = 1
اسم الصورة=(xxx)
str=set & pic_ & i & = createobject( & & scripting.dictionary & & )
تنفيذ (شارع)
str=pic_ & i & .add & & picname & & , & & picname &
تنفيذ (شارع)
ديمت ()
ريديمت(5)
tt(0)=uuu
pic_1.add البند، TTT
ليو=pic_1(صورة)
تعيين pic_2=createobject(scripting.dictionary)
إراسيت
ريديمت(5)
tt(0)=ثالثا
نن=pic_1(البند)(0)
pic_2.add rrr,ttt
زز=pic_2(رر)(0)
تنبيه (ليو)
تنبيه (نن)
تنبيه (ززز)
</script>