Warum kann ich nicht die Methoden des Objekts speichern als Eigenschaften eines anderen Objektwertliterals

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

Frage

Der folgende Code verwendet wird, einige Methoden zu beachten, die unter bestimmten Umständen laufen, so dass sie mit einer einfacheren Syntax aufgerufen werden.

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

Aber der Code hält ein leeres Objekt zurück. Ich habe überprüft, mit console.log, dass die Methoden definiert sind. Ich habe auch versucht, die Namen zu ändern, ein leeres Objekt aufrufen und dann die Eigenschaften wie zB callbacks.alter, und versucht, andere Änderungen, die sollte keine Rolle spielen.

Warum wird das nicht?

Demo

Fehler sind auf der Linie 238 von puzzle.js

War es hilfreich?

Lösung

Was genau ist das Problem? Werden die Eigenschaften sein undefined oder die Anrufe funktionieren nicht richtig?

Wenn letzteres, das Problem ist sehr wahrscheinlich, dass, wenn die Methoden aufrufen, this wird nicht mehr zur SPZ.sequenceEditor beziehen, aber Ihr callbacks Objekt; Um dieses Problem zu lösen, die Hilfsfunktion bind() verwenden oder wickeln Sie die Anrufe selbst (wie durch mehrere Frameworks definiert):

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);
    }
};

Die apply() ist nur notwendig, wenn die Methoden Argumente übernehmen. Einzelheiten finden Sie unter MDC .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top