0

以下のコードは、特定の状況で実行するいくつかのメソッドを示すために使用されているため、より単純な構文を使用して呼び出すことができます。

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

しかし、コードは空のオブジェクトを返し続けます。メソッドが定義されていることをconsole.logで確認しました。また、名前を変更し、空のオブジェクトを呼び出してから、callbacks.alter などのプロパティを追加して、問題にならない他の変更を試みました。

なぜこれがうまくいかないのですか?

デモ

エラーは puzzle.js の 238 行にあります

4

1 に答える 1

2

問題は正確には何ですか?プロパティ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を参照してください。

于 2009-11-29T21:53:58.060 に答える