引用-事件对象属性

reference - event object attributes

本文关键字:属性 对象 事件 引用      更新时间:2023-09-26

对于下面的代码,解释器如何知道事件具有. keycode属性?这段代码可以工作,我只是不完全理解为什么,更多的是这是文档。它如何知道对象事件的类型。如果我叫它e或者e1呢?方法原型f1(Event)记录在哪里?

function b0(event) 
  {if (event.keyCode==13) 
    {i4(); 
    return false;}} 

function o5('f4b_',b0); 
o5(a,b){document.getElementById(a).onkeypress=b;}

其中元素id a是一个输入文本框

事件的名称无关紧要,在函数内部它只是另一个变量。您可以将其重命名为JellyMan,如果您将if (event.keyCode==13)重命名为if (JellyMan.keyCode==13),它将正常工作。

事件的类型由脚本在运行时确定。解释器不知道事件具有。keycode属性-如果您尝试调用它,并传入一个不是正确类型的参数:b0('wheee, break it');,那么它将失败。

当作者编写脚本时,他决定函数b0将接受一个参数(他称之为event),并且它将是一个eventHandler -这在任何地方都没有指定,只是假设没有人会用其他东西调用它。所有的eventandler都有一个. keycode属性,因此假定传入的对象也有一个。

解释器不需要"知道"。当运行时系统调用事件处理程序时,它传递给它一个具有或多或少记录良好的属性的对象。

如果你在一个传递奇怪事件对象的坏浏览器中运行该代码,代码将会失败。

请记住javascript是解释代码,而不是预编译代码。任何变量都可以保存任何类型

因此,在函数b0中,第二行代码:
if (event.keyCode==13)

告诉解释器获取传递给函数(名为event)的第一个参数,并从名为keyCode的函数中获取属性。Javascript将查看事件参数,看看它是否是具有属性的正确变量类型,以及它是否实际上具有名为keyCode的属性。如果是,它将获取它的值并与13比较。如果它不是具有任何属性的正确变量类型,那么这行代码将失败,javascript将抛出异常。如果它是具有属性的正确类型的变量,但没有名为keyCode的属性,那么它将继续使用undefined属性的值,该值将通过13的相等性测试。