我一直在学习一些backbone.js并且我见过很多例子_.bindAll()
用来。我已经阅读了整个backbone.js和underscore.js文档页面,试图了解它的作用,但我仍然对它的作用非常模糊。这是下划线的解释:
_.bindAll(object, [*methodNames])
绑定了很多方法
对象,由 methodNames 指定,以
在该对象的上下文中运行
每当它们被调用时。非常便利
用于绑定正在运行的函数
用作事件处理程序,其中
否则将被调用
这个相当没用。如果没有方法名
提供了所有对象的
函数属性将绑定到
它。
var buttonView = {
label : 'underscore',
onClick : function(){ alert('clicked: ' + this.label); },
onHover : function(){ console.log('hovering: ' + this.label); }
};
_.bindAll(buttonView);
jQuery('#underscore_button').bind('click', buttonView.onClick);
=> When the button is clicked, this.label will have the correct value...
如果您可以通过提供另一个示例或一些口头解释来提供帮助,我们将不胜感激。我尝试搜索更多教程或示例,但没有找到满足我需要的内容。大多数人似乎只知道它会自动做什么......
var Cow = function(name) {
this.name = name;
}
Cow.prototype.moo = function() {
document.getElementById('output').innerHTML += this.name + ' moos' + '<br>';
}
var cow1 = new Cow('alice');
var cow2 = new Cow('bob');
cow1.moo(); // alice moos
cow2.moo(); // bob moos
var func = cow1.moo;
func(); // not what you expect since the function is called with this===window
_.bindAll(cow1, 'moo');
func = cow1.moo;
func(); // alice moos
<div id="output" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
不幸的是,实际的“绑定所有”功能仅适用于对象上的函数。要包含在原型上定义的函数,您需要将这些函数名称作为附加参数显式传递给_.bindAll()
.
不管怎样,你想要一个解释:基本上它允许你用一个具有相同名称和行为的函数替换一个对象上的函数,但也绑定到该对象,所以this === theObject
即使不将其作为方法调用(theObject.method()
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)