ما هو تطبيق جدول تجزئة جافا سكريبت الذي يتجنب تضارب مساحة اسم الكائن؟

StackOverflow https://stackoverflow.com/questions/103679

سؤال

أولا:أنا أستخدم تطبيقًا غامضًا إلى حد ما لجافا سكريبت المضمن كمحرك برمجة نصية لبرنامج Adobe InDesign CS3.يختلف هذا التنفيذ أحيانًا عن جافا سكريبت "القياسي"، ومن هنا كانت مشكلتي.

أنا استخدم مكتبة جون ريسيج jsdiff (المصدر هنا) لمقارنة تحديدات النص بين مستندين.يستخدم jsdiff كائنات الفانيليا كمصفوفات ترابطية لتعيين كلمة من النص إلى كائن آخر.(راجع المتغيرين "ns" و"os" في jsdiff.js، حول السطر 129.)

يبدأ الصداع عندما تظهر كلمة "تعكس" في النص."الانعكاس" هو الإعداد الافتراضي، يقرأ فقط الملكية على الجميع أشياء.عندما يحاول jsdiff تعيين قيمة في المصفوفة النقابية إلى ns['reflect']، ينفجر كل شيء.

سؤالي:هل هناك طريقة للتغلب على ذلك؟هل هناك طريقة لعمل جدول تجزئة في جافا سكريبت دون استخدام كائن الفانيليا الواضح؟

القواعد الأساسية: تبديل محركات البرمجة النصية ليس خيارًا.:)

هل كانت مفيدة؟

المحلول

ربما "تطرح السؤال الخطأ" (كما يقول ريموند تشين)؛بدلاً من محاولة تجنب استخدام كائنات الفانيليا، حاول تغيير طريقة تسمية أعضاء المصفوفة الترابطية.

الطريقة التي سأحاول بها التعامل مع هذا:بدلاً من وجود عضو مصفوفة ns["reflect"]، قم بتغيير الطريقة التي يبني بها jsdiff المصفوفات بحيث يكون العضو ns["_reflect"] أو بعض الأشكال الأخرى لذلك.

نصائح أخرى

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

if(object.hasOwnProperty('testProperty')){
     // do something
}

الكائنات المحددة جيدًا في جافا سكريبت هي مجرد صفائف ترابطية، ولا يوجد حقًا حل آخر مدمج للتجزئة.قد تكون قادرًا على إنشاء جدول تجزئة psuedo الخاص بك عن طريق لف فصل دراسي حول بعض المصفوفات على الرغم من أنه من المحتمل أن يكون هناك أداء كبير في العمل اليدوي المتضمن.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top