0

私は以下のコードを持っています

http://jsfiddle.net/qhoc/SashU/1/

var Callback = function(op) {
    this.callback = op.callback;
}

var Test = function (op) {
  for (var option in op) {
    if (!this[option]) this[option] = op[option];
  }

}

Test.prototype.init = function(bb) {
    console.log('aa = ' + this.aa);
    console.log('bb = ' + bb);

    if (bb < 3) {
        this.init(bb + 1);
    } else {
        this.callback;
    }
}

var finalCallback = function() {
    console.log('this is finalCallback');
}

var myCallback = new Callback({
    callback: finalCallback
});

var myTest = new Test({
    aa: 1,
    callback: myCallback
});

myTest.init(1);

19行目は、実行された'this is finalCallback'ためthis.callback;にまったく出力されませんでしたが、関数を指していません。しかし、以下は機能します:

myTest.init(1);
myCallback.callback();

myCallbackに合格したとき、合格しmyTestなかったと思いますfinalCallbackか?

誰かがこの動作とそれを修正する方法を説明するのを手伝ってもらえますか?

4

3 に答える 3

1

これは機能します:

var myTest = new Test({
    aa: 1,
    callback: myCallback.callback()
});

私はこれがあなたが意味するビットだと思います。そうでない場合は、何が印刷されていないかを明確にしてください。

これは単なる参照、つまり割り当てであるため、機能しません。

  callback: myCallback

これがそれを実行するものです()

それで:

callback: myCallback.callback;

それから:

this.callback();

簡潔ではない場合はお詫び申し上げます。私はあなたが何を求めているのか理解していることを願っています。

于 2013-03-01T04:49:46.310 に答える
1

指摘されているように、this.callback19 行目で呼び出そうとしていません。括弧を付けて呼び出します。

それでも、うまくいきません。するとvar myTest = new Test({ aa: 1, callback: myCallback });、myCallBack は関数ではありません。プロパティを持つオブジェクトcallbackです。19 行目を に変更this.callbackthis.callback.callback()て、その関数を呼び出します。19 行目、関数であるプロパティをthis.callback持つオブジェクトである Callback のインスタンスです。callback

http://jsfiddle.net/trevordixon/SashU/4/は実際の例を示しています。

于 2013-03-01T05:01:36.650 に答える
1

これを作成したいようです( op.callback を function として使用します):

var Callback = function (op) {
    this.callback = op.callback;
    return this.callback;
};

関数は次のように呼び出す必要があります()

 } else {
        this.callback();
  }

http://jsfiddle.net/oceog/SashU/3/

これは使用できる例です

于 2013-03-01T04:55:29.060 に答える