下划线bindAll,显式方法命名

Sun*_*Red 5 javascript coding-style backbone.js underscore.js

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

_.bindAll(this, 'render', 'addOne', 'addAll', 'someFunctionA', 'someFunctionB');
Run Code Online (Sandbox Code Playgroud)

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

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

_.bindAll(this);
Run Code Online (Sandbox Code Playgroud)

max*_*0rd 4

使用这种形式的bindAll 不会带来实际的性能损失。然而,如果您不希望this由于某种原因绑定某个方法,那将是一件痛苦的事情。

然而,您可能会发现您并不需要像您想象的那样频繁地使用bindAll。绑定到事件处理程序(带有事件哈希)的所有方法都会自动绑定到this.

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

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

  • 是的,Backbone 0.9 现在使用“on”而不是 0.5 及之前版本中的“bind”。在“视图世界”中,我发现你几乎总是希望“this”成为视图。但是,如果您确实遵循“this”作为事件目标的 jQuery 约定,那么这可能不适合您。就我个人而言,我喜欢“this”使用的一致性。 (2认同)