Javascript 传递回调时如何避免函数换行

Javascript 传递回调时如何避免函数换行,javascript,oop,backbone.js,Javascript,Oop,Backbone.js,我想像这样向主干网的成功回调传递一个函数 this.model.fetch({ success: this.setup }); 但是,这是行不通的,我最终不得不通过整个环境并封装在这样一个函数中: var that = this; this.model.fetch({ success: function(){ that.setup(); } }); 为什么我不能这样做?即使我将setup函数绑定到它的父函数,比如so\uuu.bind(this.set

我想像这样向主干网的成功回调传递一个函数

this.model.fetch({
    success: this.setup
});
但是,这是行不通的,我最终不得不通过整个环境并封装在这样一个函数中:

var that = this;
this.model.fetch({
    success: function(){
        that.setup();
    }
});

为什么我不能这样做?即使我将setup函数绑定到它的父函数,比如so
\uuu.bind(this.setup,this),它仍然不会使用正确的this(其父级)。但是,只有当它的“未包装在函数中…”时,bind才会返回绑定到对象的函数,它不会修改原始函数(基本上是创建您编写的包装函数)

但是,可以将此绑定函数作为回调传递

this.model.fetch({
    success: _.bind(this.setup, this);
});
或使用修改对象以使用绑定函数的:

var V = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, "setup");

        this.model.fetch({
            success: this.setup
        });
    },
    setup: function() {

    }
});
它不起作用,因为“this”是您正在定义的对象({success:this.setup}),请尝试以下操作:

var that = this;
this.model.fetch({
      success: that.setup
    }
});

但是,我不太喜欢它,因为事件处理程序就是这样,它们处理事件,然后做一些事情(比如setup()方法),在这种情况下,您可能会在闭包中丢失对象。

\uu.bind
应该适用于第一个代码段,而不是,已经解释过了。但很明显,bindall只是工作而已,这正是我在问题中试图避免的,我在回答这个问题时说的,没有任何帮助。对不起,我真的需要知道这两个函数之间的区别以及它们的具体作用。谢谢你给我指出了正确的方向@nimrod u2;.bind创建一个新函数,其中绑定得到保证,2;.bindAll修改一个对象(第一个参数),用绑定函数替换所有成员函数(或作为参数传递的函数)。看看带注释的源代码,它大部分是可读的