لماذا لا أستطيع حفظ أساليب الكائن كما خصائص أخرى الكائن حرفية

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

سؤال

ويستخدم رمز أدناه الإشارة إلى بعض الطرق لتشغيل في ظروف معينة بحيث يمكن استدعاء باستخدام تركيب بسيط.

var callbacks = {alter: SPZ.sequenceEditor.saveAndLoadPuzzle,
                 copy: SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle,
           justSave:SPZ.sequenceEditor.saveAndLoadPuzzle};

ولكن رمز يحتفظ عودته كائن فارغ. لقد راجعت مع console.log التي تم تعريفها الطرق. لقد حاولت ايضا تغيير الأسماء واستدعاء كائن فارغ ثم إضافة الخصائص كما على سبيل المثال callbacks.alter، وحاول التغييرات الأخرى التي يجب أن لا يهم.

وماذا لا هذا العمل؟

تجريبي

والخطأ هو على خط 238 من puzzle.js

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

المحلول

ما هي المشكلة بالضبط؟ سوف خصائص تكون undefined أو المكالمات فقط لا تعمل بشكل صحيح؟

وإذا كان هذا الأخير، هي المشكلة الأكثر احتمالا أن عند استدعاء الأساليب، سوف this لم يعد الرجوع إلى SPZ.sequenceEditor، ولكن الكائن callbacks الخاص بك؛ لحل هذه المشكلة، استخدم bind() وظيفة مساعد (على النحو المحدد من قبل العديد من الأطر) أو التفاف المكالمات نفسك:

var callbacks = {
    alter: function() {
        return SPZ.sequenceEditor.saveAndLoadPuzzle.apply(
            SPZ.sequenceEditor, arguments);
    },
    copy: function() {
        return SPZ.sequenceEditor.saveAsCopyAndLoadPuzzle.apply(
            SPZ.sequenceEditor, arguments);
    },
    justSave: function() {
        return SPZ.sequenceEditor.saveAndLoadPuzzle.apply(
            SPZ.sequenceEditor, arguments);
    }
};

ووapply() هو ضروري فقط إذا تأخذ الطرق الحجج. راجع التفاصيل في MDC .

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