1

私は本当にこの概念を理解するのに苦労しており、自分のコードのほんの少しでそれを見たら、うまくいくかもしれないと思っていました. オブジェクト指向のアプローチを維持しながら、コールバック関数を利用したいと思っています。あなたが提供できる助けをありがとう!

//adds functionality to buttons
    addClickEvent(newDataCollect,function() {addClickEvent(dataSubmitBtn, function(){testAjax(dataForm.elements);});

        function addClickEvent(elem,click,addtl) {
            var nwClickEvent = new elemEvents(elem,click,addtl);
            nwClickEvent.onClick();
      }

      //add click event object & properties
      function elemEvents(elem,click,addtl) {
        this.elem = elem;
        this.click = click;
        this.addtl = addtl;
      }

      //add click event object method
      elemEvents.prototype = {
        onClick: function() {this.elem.onclick = this.click;}
      }
4

2 に答える 2

0

ここで留意すべきことの 1 つは、コールバックは必ずしも非同期ではないということです。この特定のケースでonClickは、将来のある時点でユーザーが何かをクリックすると実行されるハンドラーを定義しています。これは非同期ですが、次の点を考慮してください。

function log(/* .. */){ // can be any arguments, we're just .apply'ing log with arguments
  console.log.apply(console, arguments)
}

function logThen(done /* .. */) { // takes a callback as first argument, then vals to log
  var args = [].splice.call(arguments, 1); // calls splice on the arguments, removing the CB, and returning whatever you had left
  console.log.apply(console, args);
  if (done && typeof done === 'function'){
    done();
  }
}

log(1);
log(2);
log(3);
logThen(alert, 4);
log(5);
log(6);

出力は次のようになります。

1
2
3
4  // shows an alert, then continues with.. 
5
6

これはすべて同期コードです。次のコール スタックにプッシュされるものは何もないため、コールバック (この場合はalert) を含むすべてを同期的に実行します。

ちょっと頭を上げて!

于 2013-11-16T11:52:35.053 に答える