面向对象Javascript回调

面向对象Javascript回调,javascript,oop,callback,asynccallback,Javascript,Oop,Callback,Asynccallback,我真的很难理解这个概念,我想如果我在自己的代码中看到它,它可能会点击。我真的希望在保持面向对象方法的同时利用回调函数。谢谢你能提供的任何帮助 //adds functionality to buttons addClickEvent(newDataCollect,function() {addClickEvent(dataSubmitBtn, function(){testAjax(dataForm.elements);}); function addClickEven

我真的很难理解这个概念,我想如果我在自己的代码中看到它,它可能会点击。我真的希望在保持面向对象方法的同时利用回调函数。谢谢你能提供的任何帮助

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

是的,我想说您已经在使用回调:

//add click event object & properties (constructors should be PascalCase)
function ElemEvents(elem,click,addtl) {
    this.elem = elem;
    // `click` should be a function, and as such, a callback that is called when the element is clicked
    this.elem.onclick = click;
    this.addtl = addtl;
}

// later:
var e = new ElemEvents(
    // the `elem`
    document.getElementById("id"),

    // this is the callback.
    function (event) {
        console.log("hi from event: " + event);
    },
    // the `addtl`.
    "");

这里需要记住的一点是回调不一定是异步的。在本例中,您定义了一个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
这都是同步代码-没有任何东西被推到下一个调用堆栈上,因此它会执行所有操作,包括在本例中同步执行回调警报


只是稍微抬起头

对不起,您有什么问题?我想使用回调函数,但不知道如何使用。也许我已经在做了?谢谢!读了这篇文章后,一切都很顺利,实现也很成功。