سؤال

لقد اكتشفت للتو الطريقة الصعبة التي يتم بها تمرير الكائنات بالرجوع إليها في جافا سكريبت ، على سبيل المثال:

for(var layer = 0; layer < hudLayers['layers'].length; layer++){

    // Store the to-be-calculated values in this object
    var tempValues = hudLayers['layers'][layer];

    tempValues['name'] = 'test';
}

سيؤدي هذا إلى تغيير القيمة في القيم المؤقتة و هودلايرز.(يبدو واضحا نوعا ما ، لكن المنشور بدون القليل من التعليمات البرمجية يبدو عاريا جدا.)

هل هناك طريقة سريعة للتغلب على هذا?

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

المحلول

هذا ليس مثالا على المرور بالرجوع إليه (لن تمر أي معلمات). ومع ذلك، أنت صحيح؛لن يقوم تعيين كائن بعمل نسخة عميقة.

يمكنك إجراء نسخة عميقة من كائن مثل هذا:

giveacodicetagpre.

لاحظ أنه إذا كان منشئ كائن يحتوي على أي آثار جانبية، فإن هذا الرمز سيؤدي إلى تشغيله.

نصائح أخرى

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

جعل نسخة عميقة من كائن بسيط مثل objCopy = obj.toSource();.

.توسورس على مدن

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