Run*_*ion 6 javascript jquery underscore.js
我在回调中有一些上下文问题.我用Google搜索并找到了一些选项:
如果我不必支持旧的浏览器,我肯定会使用本机绑定.这些人应该注意哪些有显着差异?
这些可以用作呼叫/申请的替代方案吗?
Gra*_*aza 17
AFAIK,绑定和代理之间略有不同,如果你使用jQuery,这可能很重要.Function.prototype.bind 始终返回一个新的函数指针.如果尚未创建相同args的代理,则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
Run Code Online (Sandbox Code Playgroud)
call 和 apply 方法调用一个函数。绑定方法返回一个可以用作引用的函数对象(例如,用于回调)。因此,绑定和调用/应用通常不具有相同的用例。
话虽这么说,MDN 在方法规范页面上有一个函数对象的绑定方法的填充(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind))以防您需要在不支持的浏览器中使用它(基本上是 IE < 8...所以在我的书中 IE8 是我支持的唯一本身不支持它的浏览器)。
最后,不要仅仅因为需要其中一个函数就考虑包含整个库。