下划线bindAll,显式方法命名

时间:2012-02-07 11:37:06

标签: javascript coding-style backbone.js underscore.js

我在很多Backbone.Views中使用_.bindAll

_.bindAll(this, 'render', 'addOne', 'addAll', 'someFunctionA', 'someFunctionB');

虽然重构这个变得非常乏味,因为我需要保持视图方法和名称列表同步。这两种方式都会导致简单的错误。

由于存在bindAll的短版本,这将消除这种需求,我想知道存在哪些缺点(性能,可读性,灵活性......)并且你认为它们可以接受获得一点点提高生产力。

_.bindAll(this);

2 个答案:

答案 0 :(得分:4)

使用这种形式的bindAll没有实际的性能损失。但是,如果您因某种原因不希望方法绑定到this,那将会非常痛苦。

但是,您可能会发现您不需要像您想象的那样经常使用bindAll。绑定到事件处理程序的所有方法(使用事件哈希)将自动绑定到this

此外,当您明确绑定事件时,可以在第三个参数中传递this绑定。例如:

this.model.bind('change', this.render, this)

答案 1 :(得分:4)

我在骨干项目中使用了_.bindAll(this)一段时间了。在对代码进行分析之后,我意识到对_.bindAll的调用占用了所有函数调用的显着部分 根据绩效测试的结果http://jsperf.com/underscore-bindall-this-vs-bindall-this-params 似乎显式方法命名更高效(特别是对于具有大量功能的对象)