Javascript Backbone.js事件处理程序命名的最佳实践

Javascript Backbone.js事件处理程序命名的最佳实践,javascript,events,backbone.js,naming-conventions,Javascript,Events,Backbone.js,Naming Conventions,假设我在一个视图中有一个函数,当某种状态改变时会触发。 给它起个什么名字最好?为什么 状态变化 州变 状态变化 状态改变 onStateChanged,因为此函数在某种状态发生更改时触发。我的赌注是stateChanged到期: stateChange看起来像是一个订单,看起来像是收到一个带有新状态的参数 onStateChange和onStateChange是存储处理程序的更多键,而不是处理程序本身的名称 IMHO我个人更倾向于使用onEventName名称,保持DOM事件处理程序的本机

假设我在一个视图中有一个函数,当某种状态改变时会触发。 给它起个什么名字最好?为什么

  • 状态变化
  • 州变
  • 状态变化
  • 状态改变

onStateChanged
,因为此函数在某种状态发生更改时触发。

我的赌注是
stateChanged
到期:

  • stateChange
    看起来像是一个订单,看起来像是收到一个带有新状态的参数
  • onStateChange
    onStateChange
    是存储处理程序的更多键,而不是处理程序本身的名称

IMHO

我个人更倾向于使用
onEventName
名称,保持DOM事件处理程序的本机命名约定

类似于
myElement.onclick=function(){/*…*/}
对于
单击事件

因此,对于
myEvent
我正在使用名为
onMyEvent
的处理程序

如果我有event
stateChange
,那么我将使用
onStateChange
处理程序

但实际上,对于团队/公司内部的每个开发团队和代码风格约定来说,这个问题更为具体

因此,此类问题的主要目标是在所有部分保持代码样式相同,以确保可读性

因此,如果您在团队中工作,只需遵守团队的代码编写约定,如果您单独处理现有代码,请尝试保持其代码样式(当然,如果该样式不明显难看)

更新:理解。

事件是什么?大致上,它是在程序外部或内部发起的一个动作,换句话说,系统中发生了一些事情,例如一些状态变化(键盘、鼠标、I/O设备的状态等)与如何改变无关(用户单击鼠标或某些程序向系统发送鼠标单击信号)

假设浏览器窗口已订阅,以获取有关某些事件的通知,并且操作系统会尽快向其发送这些通知,我们将假定在发生某些事件的同时。因此,如果用户在浏览器窗口处于活动状态且文档具有焦点时单击鼠标,浏览器会告诉文档以触发
单击
事件。这里我们的
onclick
处理程序开始调用。换句话说,系统告诉我们现在发生了某种状态的变化。我们正在处理这个变化而不是处理一个事实,即状态已经改变

让我们假设名为
的处理程序再次单击了
,因为处理程序的名称以过去时表示,我们可以得到一个合理的问题:“当单击时,它发生了多久?它被单击了多少次?嗯,可能现在处理这个操作(或操作?)已经太晚了……”。所以这个名字告诉我们在过去的某个时候发生了一些事情

与此相反,当我们的处理程序名为
onClick
时,很明显,
单击
事件只触发了一次,我们立即收到了通知。我们将处理点击事件——告诉我们鼠标的状态现在改变了(不是鼠标点击,而是点击事件)


因此,当我们需要检查某个状态是否发生了变化时,过去式中的名称更适合于这种情况。例如,如果变量存储了
状态=1
,我们可以调用函数
isStateChanged()
状态
变量中的值与当前时刻的实际值进行比较。这里的过去时是命名的好选择。

我通常选择2因素事件名称。随着应用程序规模的增长,您可能会有多个对象的状态发生变化,或者可能有一个控制器可以广播多个对象的变化事件,因此希望能够在代码和大脑中区分:

Object1:event
Object2:event

至于哪个事件的名称,我认为这取决于个人偏好和一致性。

我在谷歌上搜索了几个名称,并记录了返回结果的数量。您可以从中了解到事件处理程序最常见的表单的相对流行程度:

stateChanged 168k
stateChange 81k [1] 
handleStateChange 61k
onStateChange 59k 
onStateChanged 12k 
beforeStateChange 2k
[1] 结果显示stateChange主要用作事件的名称,而不是处理程序

使用不同的事件类型对onStateChange表单提出了更强烈的建议:

change [2]
onChange 2000k
onChanged 85k
handleChange 36k
beforeChange 27k
afterChange 22k

click [2]
onClick 48000k
onClicked 58k
handleClick 50k
beforeClick 8k [3]

onDrag 100k
handleDrag 36k
beforeDrag 32k
afterDrag 4k
onDragged 5k
[2] 太多与编程无关的结果


[3] 显然,某些Microsoft API可以预测用户将要单击的时间。

我认为应该根据操作发生的实际时刻做出改变。对我来说,onStateChange意味着它正在改变,从技术上讲,我可以在改变之前得到通知。 OnStateChanged表示操作已经发生,并在操作结束时通知我

因此,在onStateChange和onStateChanged之间存在着一个重要的意图差异。 第一个说“为这个变化做好准备”,而第二个说“它已经发生了”

编辑:我被这个意图迷住了,没有意识到命名本身。 为什么是前缀?这是为处理程序保留的。处理程序将执行与该事件相关的操作。
所以我会选择stateChange和stateChange

关于潜文本[3],并不是说点击是预期的,而是将事件传递给可能附加的任何处理程序,并让开发人员有机会以某种方式修改事件数据(可能阻止事件继续或修改默认行为)。很多框架都做同样的事情。这里不是开玩笑的地方。所以