Javascript 下划线绑定vs jQuery.proxy vs本机绑定

Javascript 下划线绑定vs jQuery.proxy vs本机绑定,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我在回调中遇到了一些上下文问题。我在谷歌上搜索,发现几乎没有选择: 本机绑定-旧浏览器不支持 JQuery代理 下划线绑定 如果我不需要支持旧的浏览器,我肯定会使用原生绑定。这两者之间有什么显著的区别吗 这些方法可以作为调用/应用的替代方法吗?调用和应用方法调用函数。bind方法返回一个可以用作引用的函数对象(例如,用于回调)。因此,bind和call/apply通常没有相同的用例 也就是说,MDN在方法规范页面()上有一个函数对象绑定方法的polyfill,以防您需要在不支持它的浏览器中使用它

我在回调中遇到了一些上下文问题。我在谷歌上搜索,发现几乎没有选择:

  • 本机绑定-旧浏览器不支持
  • JQuery代理
  • 下划线绑定
  • 如果我不需要支持旧的浏览器,我肯定会使用原生绑定。这两者之间有什么显著的区别吗


    这些方法可以作为调用/应用的替代方法吗?

    调用和应用方法调用函数。bind方法返回一个可以用作引用的函数对象(例如,用于回调)。因此,bind和call/apply通常没有相同的用例

    也就是说,MDN在方法规范页面()上有一个函数对象绑定方法的polyfill,以防您需要在不支持它的浏览器中使用它(基本上是IE<8…所以在我的书中,IE8是我支持的唯一一个本机没有的浏览器)


    P>最后,不要考虑仅仅因为你需要一个函数而包含整个库。 好的,bind和proxy之间有一点区别,如果您使用jQuery,这可能非常重要。Function.prototype.bind始终返回新的函数指针。只有在尚未创建相同参数的代理时,jQuery.proxy才会返回新函数。并不是说你想这样做,而是:

    $(elm).on('click', doStuff.bind(thing)); //adds event handler
    $(elm).off('click', doStuff.bind(thing)); //does not remove event handler as 2nd call of doStuff.bind(thing) always returns a new/different function
    
    $(elm).on('click', $.proxy(doStuff, thing)); //adds handler
    $(elm).off('click', $.proxy(doStuff, thing));//DOES remove handler, as a second call to $.proxy(doStuff, thing) is smart enough to know about similar use-cases
    
    //Likewise, if you just passed 'thing.doStuff()' into the $.off() method, it would also work
    

    那么代理和绑定是完全相同的吗?您可以在文档-vs-中看到这一点,但是$.proxy()的目的与bind()的目的相同,以更改给定函数的上下文(即“this”引用)。对此进行确认。打开两个事件处理程序,然后再关闭它们。关闭()再次确认了.bind()事件处理程序仍然启动。呃,这种“函数指针”的情况总是让我对设计事件系统的人非常恼火。谢谢