假设我有一个在视图中触发的函数,当某种状态改变时会触发。
- stateChange:状态改变
- stateChanged:状态已改变
- onStateChange:当状态改变时
- onStateChanged:当状态已改变时
假设我有一个在视图中触发的函数,当某种状态改变时会触发。
我个人更喜欢使用 onEventName
的命名方式,保留DOM事件处理程序的本地命名约定。
例如,对于click
事件,我会使用myElement.onclick = function() { /* ... */ }
。
对于myEvent
,我会使用名为onMyEvent
的处理程序。
如果有stateChange
事件,则我会使用onStateChange
处理程序。
但是,这个问题实际上更具体地涉及到开发团队和公司内的代码风格规范。
因此,在这类问题中,主要目标是在所有部分中保持相同的代码风格,以确保可读性。
因此,如果您正在团队中工作,请坚持团队的代码编写约定;如果您独自处理现有代码,请尽量保持其代码风格(当然,如果该风格不明显丑陋)。
更新:理解。
什么是事件? 粗略地说,它是一个在程序内外启动的动作,换句话说,系统中发生了某些事情,例如,某些状态改变(键盘、鼠标、I/O设备的状态等),不管是用户点击了鼠标还是某个程序向系统发送了鼠标点击信号。
假设浏览器窗口订阅获取有关某些事件的通知,并尽快将它们发送给操作系统,我们将假定在发生某些事情时同时发生。因此,如果用户在浏览器窗口处于活动状态且文档具有焦点时单击鼠标,则浏览器会告诉文档触发click
事件。这时我们的onclick
处理程序开始调用。换句话说,系统告诉我们现在发生了某种状态的改变。我们正在处理这个改变,而不是处理一个告诉我们状态已经改变的事实。
让我们假设我们的处理程序名称为onClicked
。由于处理程序的名称在过去式中,因此我们可以得出一个合理的问题:“点击了多久? 它被点击了多少次?嗯,也许现在处理该操作(或操作)太晚了……”。所以这个名字告诉我们在过去的某个时间发生了什么。
相反,当我们的处理程序名称为onClick
时,显而易见的是click
事件刚刚发生了一次,我们立即收到了通知。我们将要处理点击事件,这个信息告诉我们鼠标状态已经立即改变(不是鼠标点击,而是单击事件)。
因此,过去式的名称更适用于需要检查某些状态是否已更改的情况。例如,如果变量存储了state = 1
,我们可以调用函数isStateChanged();
,它将比较state
变量的值与当前时刻的实际值。在这种情况下,过去式是命名的好选择。
onStateChanged
是一个函数,在某种状态发生改变时会触发。
我谷歌了几个名称并注意到返回结果的数量。您可以得到一些有关最常见事件处理程序形式相对流行程度的指示:
stateChanged 168k
stateChange 81k [1]
handleStateChange 61k
onStateChange 59k
onStateChanged 12k
beforeStateChange 2k
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 可以预测用户何时单击。
handleStateChange
绝对是我最喜欢的。 - Chris KobrzakstateChanged
是由以下原因引起的:
stateChange
看起来像是一个命令,并且似乎接收一个带有 新状态 的参数。onStateChange
和 onStateChanged
更多地是用于存储处理程序而不是处理程序本身的名称。我个人的看法
something.onStateChange = function stateChanged() { /* handle change in state */ };
。当将回调参数传递给.live(
或.click(
时,我通常更喜欢.click(function handleClick(){ /* do stuff */}
。 - conny我通常会选择一个双因素的事件名称。随着应用程序规模的增长,您可能会有多个对象的状态发生变化,或者可能有一个控制器可以广播多个对象的更改事件,因此希望能够在代码和头脑中区分它们:
Object1:event
Object2:event
至于事件名称,我认为这取决于个人偏好和一致性。
我认为应该根据实际发生的时刻来区分。对于我来说,onStateChange意味着它正在发生变化,从技术上讲,在变化之前我可以被通知到。
而onStateChanged则意味着动作已经发生了,我在最后被通知到。
因此,在onStateChange和onStateChanged之间存在重要的意图差异。第一个表示“为这个变化做好准备”,而第二个表示“它已经发生了”。
编辑:我被意图带走了,没有意识到命名本身。为什么要加上on前缀?这是保留给处理程序的。处理程序将执行与该事件相关的操作。所以我会选择stateChange和stateChanged。